AspNet2.0页面生命周期
AspNet2.0頁面生命周期?
頁面框架通過如下過程處理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元素將頁面回傳到服務器??丶腞aisePostBackEvent方法必須將回傳事件映射到一個或多個服務器事件。例如,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標記文本。
轉載于:https://www.cnblogs.com/me115/archive/2010/08/23/1806760.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的AspNet2.0页面生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tab切换
- 下一篇: Brother-MFC系列打印机 PDF