3

MicrosoftのページからASP.NETのビューステートについて

ページライフサイクルのインスタンス化段階で、コントロール階層が作成され、宣言型構文で指定されたプロパティが割り当てられます。これらの宣言型プロパティは、コントロール階層が構築されるときにポストバックごとに自動的に再割り当てされるため、これらのプロパティ値をビューステートに格納する必要はありません。

これが意味するのは、aspxファイルに次のようなマークアップが含まれている場合です。

<asp:Label ID="Label1" runat="server" Font-Name="Verdana" Text="Hello, World!"></asp:Label>

ViewStateで永続化する必要がない2つのものは次のとおりです。

  • フォント名Verdana
  • テキストHello, World!

これらの2つのプロパティは毎回設定されるため、 ViewStateで永続化する必要はありません。

ViewStateで永続化する必要のないものの別の例は、aspxマークアップファイルで宣言されたアイテムです。

<asp:DropDownList ID="DropDownList1" runat="server">
   <asp:ListItem>One</asp:ListItem>
   <asp:ListItem>Two</asp:ListItem>
   <asp:ListItem>Three</asp:ListItem>
</asp:DropDownList>

DropDownListアイテム:

  • One
  • Two
  • Three

毎回宣言されるため、 ViewStateで永続化する必要はありません。

それが私がやりたいことです。ViewStateに永続化する必要のないものをViewStateに永続化しないようにしたい。逆に、ViewStateで永続化する必要があるものは、 ViewStateで永続化する必要があります

再びMSDNから:

インスタンス化段階でコントロール階層が構築されると、LabelのTextプロパティが「Hello、World!」に設定されます。そのFontプロパティでは、NameプロパティがVerdanaに設定されます。これらのプロパティは、インスタンス化の段階でページにアクセスするたびに設定されるため、この情報をビューステートに保持する必要はありません。

マークアップで属性を宣言するのではなく、プログラムで宣言されていると想像してください。

Label1.Font.Name = "Verdana";
Label1.Text = "Hello, World!";

また

DropDownList1.Items.Add("One");
DropDownList1.Items.Add("Two");
DropDownList1.Items.Add("Three");

ここで、ASP.netの魔法に、プロパティが常に存在し、 ViewStateに永続化する必要がないことを通知するために、ページの初期化中にこの変更を行います。

protected void Page_Init(object sender, EventArgs e)
{
   //Set properties *before* PageLoad; before the viewstate is read
   //That way the properties will not have to be added to the viewstate
   Label1.Font.Name = "Verdana";
   Label1.Text = "Hello, World!";

   DropDownList1.Items.Add("One");
   DropDownList1.Items.Add("Two");
   DropDownList1.Items.Add("Three");
}

それが機能しないことを除いて。ページサイクルのかなり早い段階でコントロールのプロパティを設定している場合でも、毎回プロパティを設定している場合でも、ASP.NETはそれらをViewStateで永続化する必要があると考えています。

明らかに、過去にさかのぼって実行するにはコードが必要です。ASP.NETがまだマークアップを読んでいると思っていたときから。

ViewStateで永続化する必要のないViewStateのもので永続化できないのはどうしてですか?

追記

  • なぜこれをするのですか?マークアップに入れるだけ

    できません。ドロップダウンアイテムがデータベースからのものである場合ではありません

  • コントロールのViewStateプロパティをに設定しますfalse

    できません。それがViewStateで永続化する必要があるものをオフにするときではありません

4

1 に答える 1

2

あなたは本質的にあなた自身の質問に答えました。

ストックasp.netコントロールの場合、プロパティごとに、ViewStateにとどまるものととどまらないものを決定することはできません。

独自のカスタムコントロールをロールする場合は、カスタムプロパティリストなどを使用して、より細かく保存するプロパティと保存しないプロパティを正確に制御できますが、ホイールを再作成する必要があります。

組み込みのコントロールから継承し(封印されているとは思えません)、ビューステートおよび/またはコントロールステートハンドラーをオーバーライドできる場合があります。正直に言うと、少しの利益のための大規模な事業のように聞こえます。

私はあなたが尋ねている理由を理解します-なぜ現在のモデルよりも効率的ではないのですか?問題は、ASP.NETが効率性に関するものではなく、確かに軽量ではないことです。パフォーマンスとシンプルさを犠牲にして、迅速かつ迅速に開発することがUpdatePanel重要です。例としてajaxデザインパターンを見てください。これは、開発を容易にするために完全に肥大化したajax実装です。

于 2012-06-26T13:55:42.167 に答える