ASP.NET生命周期指定,如何:
- ASP.NET processes pages to produce dynamic output
- The application and its pages are instantiated and processed
- ASP.NET compiles the pages dynamically
ASP.NET生命周期可以分爲兩組:
- Application Life Cycle
- Page Life Cycle
ASP.NET Application Life Cycle
應用程式生命周期有以下階段:
用戶請求訪問應用程式資源頁。瀏覽器將此請求發送到web伺服器。
統一管道接收第一個請求,並發生以下事件:
創建了類ApplicationManager的對象。
創建HostingEnvironment類的對象,以提供有關資源的信息。
將編譯應用程式中的頂級項。
將創建響應對象。創建並初始化應用程式對象,如HttpContext、HttpRequest和HttpResponse。
將創建HttpApplication對象的實例並將其分配給請求。
請求由HttpApplication類處理。這個類引發不同的事件來處理請求。
ASP.NET Page Life Cycle
當一個頁面被請求時,它被加載到伺服器內存中,進行處理並發送到瀏覽器。然後從內存中卸載。在每個步驟中,方法和事件都是可用的,可以根據應用程式的需要重寫這些方法和事件。換句話說,您可以編寫自己的代碼來覆蓋默認代碼。
Page類創建頁面上所有控制項的層次樹。頁面上的所有組件(指令除外)都是此控制項樹的一部分。通過向page指令添加trace=「true」,可以看到控制項樹。我們將在「指令」和「事件處理」下介紹頁指令和跟蹤。
頁面生命周期階段包括:
- Initialization
- Instantiation of the controls on the page
- Restoration and maintenance of the state
- Execution of the event handler codes
- Page rendering
理解頁面周期有助於編寫代碼,使某些特定的事情在頁面生命周期的任何階段發生。它還有助於編寫自定義控制項並在正確的時間初始化它們,用視圖狀態數據填充它們的屬性,以及運行控制項行爲代碼。
以下是ASP.NET頁的不同階段:
頁面請求-當ASP.NET收到頁面請求時,它決定是解析和編譯頁面,還是緩存頁面版本;相應地發送響應。
頁面生命周期開始-在此階段,將設置請求和響應對象。如果請求是舊請求或回發,則頁面的IsPostBack屬性設置爲true。頁面的UICulture屬性也已設置。
頁面初始化-在此階段,通過設置unique ID屬性爲頁面上的控制項分配唯一ID,並應用主題。對於新請求,將加載回發數據並將控制項屬性還原爲視圖狀態值。
頁面加載-在此階段,使用視圖狀態和控制項狀態值設置控制項屬性。
Validation-調用Validation控制項的Validate方法,在其成功執行時,頁的IsValid屬性設置爲true。
回發事件處理-如果請求是回發(舊請求),則調用相關的事件處理程序。
頁面呈現-在此階段,保存頁面和所有控制項的視圖狀態。頁面爲每個控制項調用呈現方法,呈現的輸出被寫入頁面響應屬性的OutputStream類。
Unload-呈現的頁面被發送到客戶端,頁面屬性(如Response和Request)被卸載並完成所有清理。
ASP.NET Page Life Cycle Events
在頁面生命周期的每個階段,頁面都會引發一些事件,這些事件可以進行編碼。事件處理程序基本上是一個函數或子例程,使用聲明性屬性(如Onclick或handle)綁定到事件。
以下是頁面生命周期事件:
PreInit-PreInit是頁面生命周期中的第一個事件。它檢查IsPostBack屬性並確定頁面是否爲回發。它設置主題和母版頁,創建動態控制項,獲取和設置配置文件屬性值。可以通過重載OnPreInit方法或創建頁PreInit處理程序來處理此事件。
Init-Init event初始化控制項屬性並生成控制項樹。此事件可以通過重載OnInit方法或創建頁面初始化處理程序來處理。
InitComplete-InitComplete事件允許跟蹤視圖狀態。所有控制項都啓用視圖狀態跟蹤。
LoadViewState-LoadViewState事件允許將視圖狀態信息加載到控制項中。
LoadPostData-在此階段,所有輸入欄位的內容都是用<form>標記定義的。
預加載-預加載發生在控制項中加載回發數據之前。可以通過重載OnPreLoad方法或創建頁面預加載處理程序來處理此事件。
加載-首先爲頁引發加載事件,然後爲所有子控制項遞歸引發加載事件。將創建控制項樹中的控制項。可以通過重載OnLoad方法或創建頁面加載處理程序來處理此事件。
LoadComplete-加載過程完成,控制事件處理程序運行,並進行頁驗證。此事件可以通過重載OnLoadComplete方法或創建頁LoadComplete處理程序來處理
PreRender-PreRender事件發生在呈現輸出之前。通過處理此事件,頁面和控制項可以在呈現輸出之前執行任何更新。
PreRenderComplete-由於對所有子控制項遞歸觸發PreRender事件,此事件確保預呈現階段的完成。
SaveStateComplete-保存頁面上的控制狀態。保存個性化、控制狀態和視圖狀態信息。生成HTML標記。可以通過重寫呈現方法或創建頁面呈現處理程序來處理此階段。
卸載階段是頁面生命周期的最後階段。它遞歸地引發所有控制項的卸載事件,最後引發頁面本身的卸載事件。最終清理完成,所有資源和引用(如資料庫連接)都被釋放。可以通過修改OnUnLoad方法或創建頁面卸載處理程序來處理此事件。