ASP.NET狀態管理之十二(控制項狀態ControlState)

來源:互聯網
上載者:User

如果您在編寫控制項,可以將控制項的狀態資訊儲存在 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.