如大家要轉載,請保留本人的著作權:
/*
*Description:asp.NET自訂伺服器控制項內部細節系列教程
*Auther:崇崇-天真的好藍
*MSN:chongchong2008@msn.com
*Dates:2007-05-20
*Copyright:ChongChong2008 YiChang HuBei China
*/
二 控制項的生命週期
控制項的生命週期決定何時儲存控制項和恢複它的狀態,何時與頁面及其它控制項之間進行互動,何時執行主要的處理邏輯,以及何時對輸出資料流顯示標記文本。
----------------------------------------
+ 執行個體化:構造器
----------------------------------------
----------------------------------------
+ 初始化:OnInit方法和Init事件
----------------------------------------
----------------------------------------
+ 開始跟蹤檢視狀態:TraceViewState 方法
----------------------------------------
|只回傳時發生
-------------------------------------------------------
++ 開始跟蹤檢視狀態:TraceViewState 方法
-------------------------------------------------------
-------------------------------------------------------
++ 載入回傳資料:IPostBackDataHandler.LoadPostdata 方法
-------------------------------------------------------
----------------------------------------
+ 載入:OnLoad方法和Load事件
----------------------------------------
|只回傳時發生
-------------------------------------------------------------------
++ 引發修改事件:IPostBackDataHandler.RaisePostDataChangedEvent方法
-------------------------------------------------------------------
-------------------------------------------------------------------
++ 引發回傳事件:IPostBackEventHandler.RaisePostBackEvent方法
-------------------------------------------------------------------
----------------------------------------
+ 預產生:OnPreRender方法和PreRender事件
----------------------------------------
----------------------------------------
+ 儲存檢視狀態:SaveViewState方法
----------------------------------------
----------------------------------------
+ 產生:Render方法
----------------------------------------
----------------------------------------
+ 卸載:OnUnload方法和Unload事件
----------------------------------------
----------------------------------------
+ 釋放:Dispose方法
----------------------------------------
初始化階段的末尾,頁面自動調用控制項的TraceViewState方法,TraceViewState方法保證在此階段之後,使用ViewState字典屬性而產生的變化儲存在控制項圖狀態中。
載入檢視狀態發生在回傳時,而不是初始請求過程中,在此階段中,控制項必須把其狀態恢複到它在處理先前的請求結束的情況,頁面架構自動回復ViewState字典。如果控制項需要自訂狀態管理,必須通過重載LoadViewState方法來實現自訂的狀態恢複。
載入回傳資料和引發修改事件階段,只在控制項通過現實IPostBackDataHandler介面參與了回傳資料處理時,這個階段才發生在回傳中。
引發回傳事件階段只在控制項通過現實IPostBackEventHandler介面參與了回傳事件處理時,此階段才發生在回傳中。可以通過實現IPostBackEventHandler介面的RaisePostBackEvent方法來實現邏輯,以便把用戶端事件映射到伺服器端事件。
預產生階段,應該通過重載OnPreRender方法,執行在產生控制項之前所需要的任何工作,如註冊用戶端指令碼。
實現自己的伺服器事件和回傳機制
儲存檢視狀態階段,如果控制項不維持狀態或它為儲存狀態資訊而使用ViewState字典,那麼不必再此階段實現任何邏輯,頁面架構自動儲存ViewState字典。如果控制項需要自訂的狀態管理,必須通過重載SaveVeiwState方法來實現自訂狀態的恢複。在此階段以後任何控制項的改變都不會儲存在控制項檢視狀態中。
產生階段,控制項在輸出資料流上通過重載Control的Render方法或WebControl的Rendering方法中的一種,來書寫標記文本。