頁面框架經過以下過程處理aspx文件請求:
1:解析aspx文件,並建立一個控件樹;
2:使用控件樹動態實現一個繼承自Page類的類或者控件 ;
3:動態編譯類;
4:緩存編譯類,以備後用;
5:動態建立一個編譯類的實例。頁面開始啓動生命期,在這個過程當中,頁面將經過生命週期的不一樣階段;=========================================================
頁面經歷了以下階段【其中一些階段標記爲僅僅回傳,是說只有在被回傳到服務器時,頁面才經歷這些階段】:編程
01:頁面首先從QueryString或者Request對象的Form集合中得到回傳數據。瀏覽器
02:頁面檢測回傳數據集合(NamueCollection,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方法,以使用它們的控件狀態。ui
07:加載視圖狀態(Load View State)[PostBack Only]:
頁面首先調用自身的LoadViewState方法,接着遞歸調用Controls集合控件的LoadViewState方法,以容許它們加載它們的已經保存的視圖狀態。orm
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事件,這表示全部狀態保存活動都完成了。
在頁面生命週期的這個階段執行一下操做。 a:建立一個HtmlTextWriter類實例,該實例封裝了輸出響應流 b:調用RenderCOntrol方法,並將HtmlTextWriter實例傳遞給該方法。 RenderControl方法遞歸調用子控件的RenderControl方法,以便容許每一個控件可以呈現其 Html標記文本。子控件的Html標記文本組成了最終發送給客戶端瀏覽器的Html標記文本。