ASP.NETステータスビューの概要

2708 ワード

Webアプリケーションは無状態です.サーバ内のページは、要求されるたびにWebページクラスの新しいインスタンスを作成します.これは、通常、ページおよびコントロールに関連するすべての情報が、再送のたびに失われることを意味する.たとえば、ユーザーがHTML Webページのテキストボックスに情報を入力すると、その情報はサーバに送信されますが、クライアントに戻ることはありません.Web開発におけるこの固有の限界を克服するには、ASP.NETページフレームワークには、ブラウザからWebサーバへの返信プロセス間でページとコントロールの値を維持するためのビューステータスが含まれています.ステータス管理の詳細については、[ASP.NET状態管理の概要].
ビューの状態はASP.NETページフレームワークは、再送中にページとコントロールの値を保持する場合のデフォルトの方法です.ページのHTMLが提示された後、返信中に保持する必要がある現在のページ状態は、64ビット符号化された文字列にシーケンス化され、ビュー状態の非表示フィールドまたは非表示フィールドセットに出力される.デフォルトの動作を変更して、ビューのステータスを別の場所に保存できます(たとえば、カスタムPageStatePersisterクラスを実装してページデータを格納するSQL Serverデータベースなど).非表示ページフィールドにページ状態を格納するよりも優れたデータストリーム格納方式の例については、[PageStatePersisterクラス]の例を参照してください.
Webサーバへの返信処理中に、ページのViewStateプロパティをコードで使用してデータを保持できます.ViewState属性は、ビュー状態データを含むKey/Valueデータ対からなる辞書である.
セキュリティ・ヒント:悪意のあるユーザーは、非表示フィールドの内容を簡単に表示および変更できます.ビューステータスデータの詳細については、「ビューステータスの保護」を参照してください.
ビューステータスに情報を格納すべきタイミングについては、「ASP.NET状態管理の推奨].
ビュー状態に格納可能なデータ型
ビューステータスに次のタイプのオブジェクトを格納できます.
  • 文字列
  • 整数
  • ブール値
  • 配列オブジェクト
  • ArrayListオブジェクト
  • ハッシュ表
  • カスタムタイプ変換器(詳細については、「TypeConverterクラス」を参照)
  • もちろん、他のタイプのデータを格納することもできますが、格納されているクラスはSerializableパラメータを使用してコンパイルする必要があります.これにより、ビューステータスがXMLにシーケンス化されます.
    ビューステータスを使用する場合の考慮事項
    表示状態が特定のASP.NETページはステータス情報を提供します.複数のページでこれらの情報を使用する必要がある場合、またはすべてのWebサイトのリクエスト間でステータス情報を維持する必要がある場合は、アプリケーションのステータス、セッションのステータス、またはパーソナライズなどの別のステータスメンテナンス方法を使用する必要があります.
    ビューステータス情報は、64ビットベース符号化を用いてXMLにシーケンス化される.これにより、大量のデータが生成される可能性があります.ページがサーバに返信されると、ビュー状態の内容がページ返信情報の一部として送信される.ビューステータスに大量の情報が含まれている場合、ページのパフォーマンスに影響します.したがって、アプリケーションで典型的なデータを使用するページをテストして、ビューステータスの数がアプリケーションのパフォーマンスに問題をもたらすかどうかを検出することをお勧めします.ビュー状態を使用する別の選択肢としては、「ASP.NET状態管理の推奨].
    コールバックのたびにデータストレージから更新されるデータ駆動ページなどの環境では、GridViewコントロールなどのデータコントロールによって生成された膨大な非表示フィールドを削除するために、ビューステータスをオフにする必要があります.
    ヒント:ビューステータスを明確にオフにしても、ページが返信されたかどうかを示す非表示フィールドがブラウザに送信されます.
    もう1つの重要な考慮事項は、フィールド内の膨大なデータを非表示にすることです.一部のエージェントとファイアウォールは、これらのデータを含むページへのアクセスを防止します.数の上限は、異なるファイアウォールとエージェントの実装によって変化するため、膨大な非表示フィールドは、わずかな問題を引き起こすことができます.このようなことを回避するために、ViewState属性に格納されたデータの数がページのMaxPageStateFieldLength属性で指定された上限を超えている場合、ページは、ファイアウォールで制限されたサイズの各個別フィールドのサイズを低減するために、ビュー状態を複数の非表示フィールドに分割する.
    一部のモバイルデバイスでは、非表示フィールドはサポートされていません.したがって、ビューステータスはこれらのデバイスで動作しません.詳細と選択については、「ASP.NETモバイルデバイスアプリケーション開発の概要].
    コントロールのステータス
    ビューの状態以外、ASP.NETはまた、コントロールステータスと呼ばれるフィーチャーをサポートします.ページは、ページまたはコントロールのビューステータスが無効になっている場合でも、コールバックプロセス間で保持しなければならないコントロールステータスをコントロールステータスで維持し続けます.ビューステータスと同様に、コントロールステータスは、ステータス情報を1つ以上の非表示フィールドに格納することもできます.詳細については、「ASP.NET状態管理の概要].