Asp.Net が ViewState を使用して、ページ内の情報とユーザー定義の情報をクライアントとサーバーの間で保存していることは誰もが知っています。
2.0 より前のバージョンでは、ViewState はページ上の非表示コントロールに保存されます: __VIEWSTATE
ViewState の保存方法と保存場所を変更することはできません。
2.0 では、Asp.Net でこの機能が公開され、ViewState の保存場所をカスタマイズできるようになりました。
2.0 では、PageStatePersister という新しい属性が Page クラスに追加されました。
このプロパティをオーバーライドして、カスタム ViewState 保存を実装できます。このプロパティは、PageStatePersister クラスから継承されたサブクラスのインスタンスを返します。
2.0 ではデフォルトで 2 つの保存方法が提供されています。1 つはページに保存する方法 (HiddenFieldPageStatePersister)、もう 1 つはセッションに保存する方法 (SessionPageStatePersister) です。
次のコードは、PageStatePersister プロパティをオーバーライドし、ViewState をセッションに保存します。
protected override PageStatePersister PageStatePersister
{
得る
{
新しいSessionPageStatePersister(this)を返します;
}
}
これら 2 つのデフォルトの保存メソッドに加えて、PageStatePersister クラスを継承して独自の保存メソッドを実装できます。
次のコードは、ViewState をファイルに保存する方法を示しています。
システムを使用する;
System.Data を使用します。
System.Configuration を使用します。
System.Web を使用します。
System.Web.Security を使用します。
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Web.UI.HtmlControls を使用します。
System.IO を使用します。
System.Runtime.Serialization.Formatters.Binary を使用します。
/**//// <概要>
/// CWingViewState の概要説明
/// </概要>
パブリック クラス CWingViewState : PageStatePersister
{
public CWingViewState(ページ page):base(ページ)
{
パブリック
オーバーライド void Load()
{
ReadFile();
オーバーライド
void Save()
{
WriteFile();
プライベート
void WriteFile()
{
FileStream ファイル = File.Create(@"C:CustomerViewState.CW");
BinaryFormatter bf = 新しい BinaryFormatter();
bf.Serialize(ファイル、base.ViewState);
ファイル.フラッシュ();
file.Close();
プライベート
void ReadFile()
{
FileStream ファイル = File.OpenRead(@"C:CustomerViewState.CW");
BinaryFormatter bf = 新しい BinaryFormatter();
Base.ViewState = bf.Deserialize(ファイル);
}
ページ
内:
protected オーバーライド PageStatePersister PageStatePersister
{
得る
{
新しい CWingViewState(this) を返します。
}
}
出典: .Net space BLOG