- - PR -
プログラミングASP.NET第2回の記事について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-05-30 05:14
この記事で「自動状態管理」とビュー・ステートを解説していますが 自動状態管理とビュー・ステート(View State)は、別々の機能なのでしょうか。 それともView Stateの日本語訳が「自動状態管理」なのでしょうか。 Page DirectiveにEnableViewState="False"を指定しても TextBoxコントロールなどは、PostBackされたときに入力したデータが復元されます。 また、TextBoxコントロールに直接 EnableViewState="False"を指定しても PostBackされたときに入力したデータが復元されます。 つまり、TextBoxコントロールに入力したデータは、EnableViewStateで False|Trueのいずれを指定してもPostBackされたときに復元されます。 ただし、ViewState("myViewState") = "Some Value"のように ViewState()に格納した値は、EnableViewState="False"を指定すると 無効になります。 EnableViewState="False"は、どのようなときに指定すると 効果があるのでしょうか。 | ||||
|
投稿日時: 2002-05-31 19:32
ビューステートは、自動状態管理を実現する仕組みの一部だと考えればいいでしょう。 テキストボックスの文字列や、リストボックスの選択アイテムといった情報は、 普通にフォームからサブミットすれば、サーバに送信されますから、 ビューステートが無くても復元されます。 しかし、サーバーコントロールはそのほかにも、サイズや文字色といった さまざまな状態を持っています。こうした状態は通常ポストバックされない ため、復元することができません。そこで用意されたのがビューステート です。 詳しくは次回執筆を予定しているPageディレクティブの解説をごらんください。 | ||||
|
投稿日時: 2002-06-01 10:23
でも、実験してみるとビューステートのHIDDENの中身は、サーバーコントロールのサイズや文字色を変えても変わらないし、大体これらのプロパティはaspxファイル(.csファイル)に書いてあるからポストバックしなくても復元できますよね??(その証拠にEnableViewStateプロパティをFalseにしても状態は維持できるみたいです)自分の実験結果を見ると、ビューステートのHIDDENと状態維持は関係ないような気がするんですが?? | ||||
|
投稿日時: 2002-06-01 14:57
田口です。 本文にもあるとおり、ビューステートは「ランタイム時」に変更されたプロパティ値 を維持するための機構です。イベントハンドラでプロパティ値を変更するコードを 書いて実験してみてください。EnableViewStateの値によって、__VIEWSTATEの 値が変化する様子が確認できると思います。 詳しくは次回サンプルを交えて解説します。 | ||||
|
投稿日時: 2002-06-03 09:51
Q316813 にも記述されていました。 ありがとうございます。 私なりにまとめると: TextBox, CheckBox, RadioButtonなどのように form-get, form-postで サーバにポストされるデータは、IPostBackDataHandlerにて復元される。 (サーバにポストされますから、わざわざView State に保存する必要ありませんよね) サーバにポストされないデータは、View State にて復元される。 「自動状態管理」機能は、IPostBackDataHandlerとView Stateで実現していることになります。 EnableViewStateは、View Stateに格納されているデータのみ適用されることになります。 ところで、EnableViewState="False"は、どのようなときに指定すると効果があるのでしょうか。ご存知の方お教えてください。 [ メッセージ編集済み 編集者: Dr ADO.NET 編集日時 2002-06-03 09:56 ] | ||||
|
投稿日時: 2002-06-04 05:06
いろいろ調べてみたのですが
EnableViewState="False"は、Repeater, DataList, DataGridなどDataコントロール系の Web コントロールを使用するときに指定すると効果があるようです。 たとえば、 Repeaterコントロールを使用するとき EnableViewState="False"を指定 しないと、データベースの内容が View State にも保存されてページをロードする ときに余分なオーバーヘッドになります。 <form runat="server">タグを使用しないとき(PostBack不要)は、View Stateは生成 されませんので、EnabelViewState プロパティは無効です。 Tip: 参照系のDataList, DataGridコントロールを使用するときは、 EnableViewState="False"を指定してページロード時の負荷を軽減 してください。 RadioButtonList, CheckButtonList, DropDownList, ListBoxなども 同様の理由で EnableViewState="False"を指定してください。
Note: DataList, DataGridにレコードの編集機能を付加するときは、EnabelViewState="True"を 指定してください。 ページロード時のオーバーヘッドを軽減するには、DataGridのPageSize=を指定して ページに表示されるレコード数を制約します。 DataListには、PageSize=のプロパティがないので編集機能を付加するときは お勧めできません。 それから、DataGridにAllowPaging="True", AllowSorting="True"を指定 するときは、EnableViewStateプロパティを"True"に設定してください。 |
1