如果您在編寫控制項,可以將控制項的狀態資訊儲存在 ViewState 字典中,該字典是一個 StateBag 對象。開發人員將通過 ControlState 屬性檢索控制項狀態。您為 ViewState 屬性指定鍵和值,Page 對象將對請求之間的狀態資訊進行序列化。要在您的控制項中執行自訂狀態處理,可重寫 LoadViewState 和 SaveViewState 方法。在頁開發人員禁用檢視狀態時,儲存在此字典中的所有狀態資訊都會丟失。為彌補這一缺陷,在 ASP.NET 2.0 版中,您可以將關鍵狀態資訊儲存在一個稱為控制項狀態的單獨對象中。在頁開發人員禁用檢視狀態時,控制項狀態對象不會受到影響。要將狀態資訊儲存在控制項狀態對象中,控制項需要重寫 LoadControlState 和 SaveControlState 方法,並且需要在每次初始化該控制項時將其註冊為在控制項狀態中儲存狀態資訊。可以通過重寫 OnInit 方法並調用 RegisterRequiresControlState 方法將控制項註冊為使用控制項狀態。
控制項狀態是一個包含 Web 伺服器控制項正常工作所需要的關鍵檢視狀態資料的對象,並且它包含在一個單獨的對象(與包含普通檢視狀態資訊的對象不同)中。在 Page 層級禁用檢視狀態時,控制項狀態資料不會受到影響,但是需要額外的實現步驟才能使用。
下面的程式碼範例示範一個從 PageStatePersister 類派生的類如何初始化 ControlState 屬性。此樣本將 ControlState 屬性指派給 Pair 對象的 Second 欄位,並使用 ObjectStateFormatter 類對該屬性進行序列化。調用 Load 方法時,使用 ObjectStateFormatter 類對檢視狀態和控制項狀態資訊進行還原序列化,並使用所得 Pair 對象的 Second 欄位初始化 ControlState 屬性。
//
// Load ViewState and ControlState.
//
public override void Load()
{
Stream stateStream = GetSecureStream();
// Read the state string, using the StateFormatter.
StreamReader reader = new StreamReader(stateStream);
IStateFormatter formatter = this.StateFormatter;
string fileContents = reader.ReadToEnd();
// Deserilize returns the Pair object that is serialized in
// the Save method.
Pair statePair = (Pair)formatter.Deserialize(fileContents);
ViewState = statePair.First;
ControlState = statePair.Second;
reader.Close();
stateStream.Close();
}
http://aierong.cnblogs.com
Sql Server2005 Transact-SQL 新兵器學習總結之-總結
MS SQLDatabase Backup和恢複預存程序(加強版本)
sql server中分散式查詢隨筆(連結的伺服器(sp_addlinkedserver)和遠程登入映射(sp_addlinkedsrvlogin)使用小總結)
ASP.NET2.0國際化/本地化應用程式的實現總結(多語言,多文化頁面的實現)
WAP開發資料站(最新更新)
自訂格式字串隨筆 (IFormattable,IFormatProvider,ICustomFormatter三介面的實現)
Mcad學習筆記之非同步編程(AsyncCallback 委託,IAsyncResult介面,BeginInvoke方法,EndInvoke方法的使用小總結)
Mcad學習筆記之通過反射調用類的方法,屬性,欄位,索引器(2種方法)
Mcad學習筆記之序列化(2進位和Soap序列化)
Mcad學習筆記之委託再理解(delegate的構造器,BeginInvoke,EndInvoke,Invoke4個方法的探討)
WinForm開發,表單顯示和表單傳值相關知識總結
Mcad學習筆記之Microsoft Windows服務
copy某目錄下的所有的目錄和檔案到目的目錄(目錄數據備份)
ASP.NET狀態管理之一(概括篇)