状態管理

概念

 Httpでは状態という概念がありません、ViewStaeはサーバーコントロールの状態を維持するための機構です。PostbackはAsp.netの特徴な機能の一つです、ViewStateはこの機能を簡単に動作するために、提供している状態維持する手段です。簡単にいうとViewStateはページフレームワークに管理されているHidden Field(__VIEWSTATE)の文字列です。
 ViewState はコントロールの情報を保存するではなく、Form 内対応するコントロールの値を保存する。特にFormと一緒にPostされていないコントロールの値。
 ページ生成に利用する状態値をHidden Fieldに格納しています、ページはサーバーへPostBackされたとき、サーバーはViewStateのデータを解析、検証、使用して、ページ内のコントロール状態を復元します。
 ViewState 利用するデメリットは、サーバーへのリクエストとリスポンスの時間が長くなって、毎回のPostBackにデータのシリアライズとデシリアライズ処理が行っていますので、処理に時間がかかります。

内部動作の流れ

  1. Asp.netはページを実行する時、ページのSaveViewStateメソッドは該当ページのViewStateとすべてのコントロールが検出し、Base64でエンコードでオブジェクトにシリアライズして、FormのHidden Field(__VIEWSTATE)に値を渡します。
  2. 表示するページのHTMLコードをクライアントへ送信する。
  3. FormのHidden Fieldはクライアントへ送信するページの一部であるため、クライアントのブラウザに一時保存されます。
  4. クライアントはPostbackする際に、ViewStateの値もサーバーへ送信します。
  5. Asp.netはPostbackしたViewStateの文字列を解析して、LoadViewStateメソッドでViewStateの値で該当ページと各コントロールの状態を復元します。

 まとめにいうと、サーバーはページ内のオブジェクトの状態をシリアライズして、クライアントへ送信します。Postback時クライアントから送信したViewStateをデシリアライズして、前の状態を取得します。

使用例

 基本的に、ASP.NET Web サーバー コントロールは、プロパティ値をインスタンスフィールドとしては保持しない。Stringをキー、Objectを値とするディクショナリであるViewStateに、プロパティごとに異なる文字列をキーとして保存する。

ソースコード例:

String s = ViewState["Text"] as String;
return (s == null) ? String.Empty : s;

留意点

  • 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は暗号化されていません。
  • ViewStat状態管理の範囲はポストバックの単位になります。一度値を渡して、別ページへ遷移し、戻ったら、値はリセットされます。
  • Aspxページの先頭の設定に「EnableViewState="false"」と設定すると、ViewStateが無効になります。
  • ページ遷移に値の取り渡しに利用できません。
  • ViewStateがPageレベルで無効にしても、コントロールの状態データへの影響ない


本当にほしかったのはこういうブログだったんだ

(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:32:44 (1628d)

G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMITȂ1~] COiq COsیI