大家都知道ASP.Net中使用VIEwState來在客戶端與服務端之間保存頁面中的信息及用戶自定義的信息.
在2.0之前的版本中,ViewState是保存在頁面中的隱藏控件中的:__VIEWSTATE
我們無法改變VIEwState的保存方式及保存位置.
現在在2.0中,ASP.Net開放了這個功能,允許我自定義VIEwState的保存位置.
在2.0的Page類中新增了一個屬性:PageStatePersister.
我們可以重寫這個屬性來實現自定義VIEwState的保存.這個屬性要返回一個繼承自PageStatePersister類的子類的一個實例.
2.0中默認提供了兩種保存方法:一個是保存在頁面中(HiddenFIEldPageStatePersister ),另外一個是保存在Session中(SessionPageStatePersister ).
下面的代碼重寫了PageStatePersister屬性,將VIEwState保存到Session中:
protected override PageStatePersister PageStatePersister
{
get
{
return new SessionPageStatePersister(this);
}
}
除了這兩種默認的保存方式外,我們可以繼承PageStatePersister類,來實現自己的保存方式.
以下的代碼演示了如果將VIEwState保存到文件中:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
/**//// <summary>
/// CWingVIEwState 的摘要說明
/// </summary>
public class CWingVIEwState : PageStatePersister
{
public CWingVIEwState(Page page):base(page)
{
}
public override void Load()
{
ReadFile();
}
public override void Save()
{
WriteFile();
}
private void WriteFile()
{
FileStream file = File.Create(@"C:\CustomerVIEwState.CW");
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(file, base.VIEwState);
file.Flush();
file.Close();
}
private void ReadFile()
{
FileStream file = File.OpenRead(@"C:\CustomerVIEwState.CW");
BinaryFormatter bf = new BinaryFormatter();
base.VIEwState = bf.Deserialize(file);
}
}
具體的頁面中:
protected override PageStatePersister PageStatePersister
{
get
{
return new CWingVIEwState(this);
}
}
出處:.Net空間 BLOG