天天看點

ASP.NET頁面生命周期與應用程式生命周期

ASP.NET頁面生命周期與應用程式生命周期

頁面生命周期

頁面生命周期執行一系列步驟:頁面的初始化、執行個體化控件、還原和維護狀态、運作事件處理程式代碼、呈現。為了在合适的階段執行所需的代碼,是以要對頁面生命周期非常熟悉。在頁生命周期的各個階段,頁面會逐個引發定義的事件,通過對代碼開發,在頁面的生命事件中執行我們所需要的程式

頁生命周期階段

1、  頁請求:發生在頁面生命周期之前,使用者請求頁時,ASP.NET将确定是否需要分析和編譯頁,進而确定是否開始頁面的生命周期,或者是否可以在不運作頁的情況下發送頁面緩存以進行響應。

2、  開始:設定頁屬性,如:HttpContext以及其他屬性;在此階段,頁面需要确定是回發請求還是新請求,并設定IsPostBack屬性;設定頁面的UICulture屬性。

3、  頁面初始化:加載所有主題;控件生成,并設定UniqueID;

注:ViewState、ControlState中的值還未加載至控件;如果頁面是回發,則回發資料也還未加載;故此時控件可以通路,但值可能出錯。

4、  加載:如果目前請求是回發請求,則為控件加載ViewState和ControlState中的值。

5、  驗證:調用所有驗證程式控件的Validate方法,此方法将設定驗證程式控件和頁的IsValid屬性。

6、  回發事件處理:如果請求是回發請求,則調用所有事件處理程式。

7、  呈現:首先對該頁和所有控件進行儲存視圖狀态,然後對每個控件調用Render方法,它會提供一個文本編寫器,用于将控件的輸入寫入頁的Response屬性的OutputStream中。

8、  解除安裝:完成呈現,并已将頁發送至用戶端、準備丢棄該頁後,調用解除安裝。将解除安裝屬性如:Response和Request等等。

頁生命周期事件:

1、PreInit

完成操作:檢查IsPostBack屬性來确定是不是第一次處理該頁;

                     建立或重新建立動态控件

                     動态設定主要頁

                     動态設定Theme屬性

                     讀取或設定配置檔案屬性

注:如果請求是回發請求,則控件的值尚未從視圖狀态恢複,即:不應該在此事件中設定控件屬性。

2、Init

完成操作:在所有控件都已經初始化并且應用所有外觀設定後引發。使用該事件來讀取和初始化控件屬性。

3、InitComplete

完成操作:由Page對象引發,使用該事件來處理要求完成所有初始化工作的任務。

4、PreLoad

完成操作:為頁和所有控件加載視圖狀态,然後處理Request 執行個體包括的任何回發資料。

注:如果需要在Load之前對頁或控件進行處理,需要該事件。

5、Load

完成操作:以遞歸方式加載所有控件。

6、控件事件

完成操作:處理控件引發的事件。

注:在回發請求中,如果頁包含驗證程式控件,請在執行任何處理之前檢查Page和各個驗證控件的IsValid屬性。

7、LoadComplete

8、PreRender

在控件輸出前最後的修改機會。

注:在該事件發生前的操作:

Page對所有控件遞歸進行EnsureChildControl操作

設定了DataSourceID屬性的資料綁定控件會調用DataBind方法。

9、SaveStateComplete

在該事件發生前,已經對控件的ViewState進行了儲存。将忽略對頁和控件所作的所有修改。

10、Render

方法,便于開發

11、UnLoad

應用程式生命周期

在應用程式的生命周期期間,應用程式會引發可處理的事件并調用可重寫的特定方法。若要處理應用程式事件或方法,可以在應用程式根目錄中建立一個名為 Global.asax 的檔案。如果建立了 Global.asax 檔案,ASP.NET 會将其編譯為從 HttpApplication 類派生的類,然後使用該派生類表示應用程式。

HttpApplication 程序的一個執行個體每次隻處理一個請求。由于在通路應用程式類中的非靜态成員時不需要将其鎖定,這樣可以簡化應用程式的事件處理過程。這樣還可以将特定于請求的資料存儲在應用程式類的非靜态成員中。例如,可以在 Global.asax 檔案中定義一個屬性,然後為該屬性賦一個特定于請求的值。

Application_Start 和 Application_End 方法是不表示 HttpApplication 事件的特殊方法。在應用程式域的生命周期期間,ASP.NET 僅調用這些方法一次,而不是對每個 HttpApplication 執行個體都調用一次。