- バックアップ一覧
- ソース を表示
- +Asp.Net+ViewState は削除されています。
- 1 (2011-01-15 (土) 16:08:15)
+Asp.Net+状態管理?
Httpでは状態という概念がありません、ViewStaeはサーバーコントロールの状態を維持するための機構です。PostbackはAsp.netの特徴な機能の一つです、ViewStateはこの機能を簡単に動作するために、提供している状態維持する手段です。簡単にいうとViewStateはページフレームワークに管理されているHidden Field(__VIEWSTATE)の文字列です。
内部動作の流れ:
- Asp.netはページを実行する時、ページのSaveViewStateメソッドは該当ページのViewStateとすべてのコントロールが検出し、Base64でエンコードでオブジェクトにシリアライズして、FormのHidden Field(__VIEWSTATE)に値を渡します。
- 表示するページのHTMLコードをクライアントへ送信する。
- FormのHidden Fieldはクライアントへ送信するページの一部であるため、クライアントのブラウザに一時保存されます。
- クライアントはPostbackする際に、ViewStateの値もサーバーへ送信します。
- Asp.netはPostbackしたViewStateの文字列を解析して、LoadViewStateメソッドでViewStateの値で該当ページと各コントロールの状態を復元します。
まとめにいうと、サーバーはページ内のオブジェクトの状態をシリアライズして、クライアントへ送信します。Postback時クライアントから送信したViewStateをデシリアライズして、前の状態を取得します。
留意点:
- ViewStateは必ず<form runat=server>とマークされているブロック内で使用します。
- Postback時、データとViewStateの値を正しいコントロールへ渡すため、ページ自身では、20バイトくらいの情報をViewStateに保存していますので、ViewStateを禁止にしても、ViewStateのHidden Fieldに少量な文字列が入っています。
- 大量のデータをViewStateに保存する場合、帯域が狭い環境だと、ページのダウンロードとアップロードスピードが遅くなる可能性があります。
この問題を回避するため、ViewStateの値をサーバーで管理する方法(データベース、ファイル、Sessionなど)がありますが、ケースによって、採用するかどうか判断してください。
- ViewStateの利用はサーバーのメモリを消費しています。
- ViewStateのデータが大きすぎると、タイムアウトが発生します。デフォルトは20分
- ViewStateはすべての.NETのタイプをサポートするわけではありません。
string、int、bool、array、arraylist、hashtableと自定義の typeconverter
- デフォルトでは、ViewStateは暗号化されていません。
0