AspNet2.0頁面生命週期

AspNet2.0頁面生命週期
2008-03-01 14:57

頁面框架通過如下過程處理aspx文件請求:
    1:解析aspx文件,並創建一個控件樹;
    2:使用控件樹動態實現一個繼承自Page類的類或者控件 ;
    3:動態編譯類;
    4:緩存編譯類,以備後用;
    5:動態創建一個編譯類的實例。頁面開始啓動生命期,在這個過程中,頁面將通過生命週期的不同階段;

頁面經歷瞭如下階段, 其中一些階段標記爲僅僅回傳,是說只有在被回傳到服務器時,頁面才經歷這些階段:

01:頁面首先從QueryString或者Request對象的Form集合中獲得回傳數據。

02:頁面檢測回傳數據集合(NameValueCollection,Form或者QueryString)是否包含一個鍵爲_CallBackId的項。如 果存在,那麼設置其Boolean屬性IsCallBack爲True,以便通過AspNet客戶端回調機制,標明頁面已經回傳到服務器。

03:預初始化(PreInit):
在頁面生命週期的預初始化階段執行如下操作:
   a:調用OnPreInit方法引發PreInit事件。
   b:利用App_Themes目錄中的內容初始化主題,以動態實現一個PageTheme類型的類,
    編譯該類,並創建一個編譯類的實例,接着將實例賦值給它的PageTheme屬性值
   c:應用母版頁

04:初始化(Init):
在頁面生命週期的初始化階段執行以下操作
   a:遞歸初始化Controls集合中的控件。初始化包括設置這些控件的屬性,
    例如:Page,Id和NameContainer等
   b:遞歸應用控件皮膚
   c:調用OnInit方法以引發自身的Init事件,接着遞歸調用子控件的OnInit方法來引發它們的Init事件
   d:調用自身的TrackViewState方法來啓動自身的視圖狀態跟蹤,接着遞歸調用子控件
    的TrackViewState方法來啓動它們的視圖狀態跟蹤。

05:完成初始化(InitComplete):
頁面調用OnInitComplete方法來引發InitComplete事件。該事件標明瞭初始化階段的結束。
此時,頁面Controls集合的所有控件都被初始化了。


06:加載控件狀態(Load Control State)[PostBack Only]:
頁面遞歸調用Control集合中控件的LoadControlState方法,這些控件已經調用了Page類
的RegisterRequiresControlState方法,以使用它們的控件狀態。

07:加載視圖狀態(Load View State)[PostBack Only]:
頁面首先調用自身的LoadViewState方法,接着遞歸調用Controls集合控件的LoadViewState方法,以允許它們加載它們的已經保存的視圖狀態。

08:加載回傳數據(Load Post Data)[PostBack Only]:
頁面調用實現IPostBackDataHandler接口的控件的LoadPostData方法,並將回傳數據傳遞給該方法。每個控件的LoadPostDate方法都必須訪問回傳數據,並據此更新相應的控件屬性。
例如:TextBox控件的LoadPostData方法將文本框的新值設置爲TextBox控件的Text屬性值。

09:預加載(PreLoad):
頁面調用OnPreLoad方法以引發PreLoad事件。該事件表示頁面生命週期將進入加載階段。

10:加載(Load):
頁面首先調用自身的OnLoad方法以引發自身的Load事件,接着遞歸調用Controls集合中控件的OnLoad方法以引發它們的Load事件。頁面開發人員可以爲Load事件註冊回調,那麼就可以通過編程將子控件添加到頁面的Controls集合中。

11:加載回傳數據(Load Post Data)[PostBack Only Second Try]:
頁面調用控件的LoadPostBack方法。這些控件如果實現了IPostBackDataHandler接口,那麼在加載階段,它們已通過編程添加到Controls集合中。

12:引發回傳數據修改事件(Raise Post Data Changed Event)[PostBack Only]:
頁面調用控件的RaisePostDataChangeEvent方法,這些控件的LoadPostData方法返回true。
RaisePostDataChangeEvent方法引發了回傳數據修改事件。例如:當文本框的新值與舊值
不同時,那麼TextBox控件將引發該事件。

13:引發回傳事件(Raise PostBack Event)[PostBack Only]:
頁面調用控件的RaisePostEvent方法,這些控件相關的Html元素用於提交表單。例如,Button控件的相關Html元素將頁面回傳到服務器。控件的RaisePostBackEvent方法必須將回傳事件映射到一個或多個服務器事件。例如,Button控件的RaisePostBackEvent方法將事件映射到了服務器端事件Command和Click上。

14:完成加載(Load Complete):
頁面調用OnLoadComplete方法來引發LoadComplete事件,這表示所有加載活動,包括加載回傳數據,以及引發回傳數據修改事件,並以更新控件自身的活動都完成了。

15:引發回調事件(Raise CallBack Event)(PostBack And CallBack Only):
頁面調用控件的RaiseCallBackEvent方法。該控件可使用AspNet客戶端回調機制來允許客戶端方法(例如JavaScript函數)調用服務器端方法,而無需將整個頁面回傳給服務器。
RaiseCallBackEvent方法必須調用服務器端方法。如果頁面的回傳使用了客戶端回調機制,那麼頁面將不會執行剩餘的頁面生命週期階段。

16:預呈現(PreRender):
在頁面生命週期這個階段執行一下操作。
   a:調用EnsureChildControls方法來確保在頁面進入呈現階段之前,創建其子控件。
   b:調用自身的OnPreRender方法來引發PreRender事件。
   c:遞歸調用Controls集合中控件的OnPreRender方法,以引發它們的PreRender事件。

17:預呈現完成(PreRender Complete):
頁面調用OnPrerenderComplete方法來引發PreRenderComplete事件,這表示所有預呈現活動完成了。

18:保存控件狀態(Save Control State):
頁面遞歸調用Controls集合中控件的SaveControlState方法。這些控件已經調用了Page類的RegisterRequiresControlState方法來保存它們的控件狀態。

19:保存視圖狀態(Save View State):
頁面首先調用自身的SaveViewState方法,然後調用Controls集合中的SaveViewState方法,以允許它們來保存其視圖狀態。

20:保存狀態完成(Save View Complete):
頁面調用OnSaveStateComplete方法以引發SaveStateComplete事件,這表示所有狀態保存活動都完成了。

21:呈現:
在頁面生命週期的這個階段執行一下操作。
   a:創建一個HtmlTextWriter類實例,該實例封裝了輸出響應流
   b:調用RenderCOntrol方法,並將HtmlTextWriter實例傳遞給該方法。
RenderControl方法遞歸調用子控件的RenderControl方法,以便允許每個控件能夠呈現其
Html標記文本。子控件的Html標記文本組成了最終發送給客戶端瀏覽器的Html標記文本。

方法:Constructor
活動 :始終

方法:Construct
活動 :始終

方法:TestDeviceFilter
活動 :始終

方法:AddParsedSubObject
活動 :始終

方法:DeterminePostBackMode
活動 :始終

方法:OnPreInit
活動 :始終

方法:LoadPersonalizationData
活動 :始終

方法:InitializeThemes
活動 :始終

方法:OnInit
活動 :始終

方法:ApplyControlSkin
活動 :始終

方法:ApplyPersonalization
活動 :始終

方法:OnInitComplete
活動 :始終

方法:LoadPageStateFromPersistenceMedium
活動 :PostBack

方法:LoadControlState
活動 :PostBack

方法:LoadViewState
活動 :PostBack

方法:ProcessPostData1
活動 :PostBack

方法:OnPreLoad
活動 :始終

方法:OnLoad
活動 :始終

方法:ProcessPostData2
活動 :PostBack

方法:RaiseChangedEvents
活動 :PostBack

方法:RaisePostBackEvent
活動 :PostBack

方法:OnLoadComplete
活動 :始終

方法:OnPreRender
活動 :始終

方法:OnPreRenderComplete
活動 :始終

方法:SavePersonalizationData
活動 :始終

方法:SaveControlState
活動 :始終

方法:SaveViewState
活動 :始終

方法:SavePageStateToPersistenceMedium
活動 :始終

方法:Render
始終

方法:OnUnload
活動 :始終
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章