ASP.NET生命週期


ASP.NET生命週期如何指定?如下說明:

  • ASP.NET處理頁面以產生動態輸出
  • 應用程式及其頁面被範例化和處理
  • ASP.NET動態編譯成頁面

ASP.NET的生命週期可以分為兩組:

  • 應用程式生命週期
  • 頁面生命週期

ASP.NET應用程式生命週期

應用程式生命週期有以下幾個階段:

  • 使用者請求存取應用程式資源,頁面。瀏覽器將此請求傳送到Web伺服器。
  • 統一管道接收第一個請求,並行生以下事件:
    • ApplicationManager類的一個物件被建立。
    • 建立HostingEnvironment類的一個物件來提供有關資源的資訊。
    • 編譯應用程式中的頂級專案。
  • 響應(Response)物件被建立。應用程式物件,如HttpContextHttpRequestHttpResponse被建立和初始化。
  • HttpApplication物件的一個範例被建立並分配給請求。
  • 該請求由HttpApplication類處理,這個類處理請求的不同事件。

ASP.NET頁面生命週期

當一個頁面被請求時,它被載入到伺服器記憶體中,進行處理並行送到瀏覽器。 然後它從記憶體中解除安裝。在這些步驟的每個步驟中,都有可用的方法和事件,這些方法和事件可以根據應用程式的需要進行覆蓋。換句話說,您可以編寫自己的程式碼來覆蓋預設程式碼。

Page類建立頁面上所有控制元件的分層樹。頁面上的所有元件(指令除外)都是此控制元件樹的一部分。可以通過將trace =「true」新增到頁面指令來檢視控制元件樹。我們將涵蓋頁面指令,並在「指令」和「事件處理」下的跟蹤。

頁面生命週期階段是:

  • 初始化
  • 範例化頁面上的控制元件
  • 恢復和維護狀態
  • 執行事件處理程式程式碼
  • 頁面渲染

了解頁面迴圈有助於編寫程式碼,使頁面生命週期的任何階段都能發生一些特定的事情。 它還有助於編寫自定義控制元件並在正確的時間初始化它們,使用檢視狀態資料填充它們的屬性並執行控制行為程式碼。

以下是ASP.NET頁面的不同階段:

編號 階段 描述/說明
1 頁面請求 當ASP.NET獲得一個頁面請求時,它決定是否解析和編譯該頁面,或者會使用一個快取的頁面版本。相應地傳送響應。
2 開始頁面生命週期 在這個階段,RequestResponse物件被設定。如果請求是舊請求或回發,則頁面的IsPostBack屬性設定為true。頁面的UICulture屬性也被設定。
3 頁面初始化 在此階段,通過設定UniqueID屬性並應用主題,頁面上的控制元件被分配唯一ID。 對於新的請求,載入回發資料並將控制元件屬性恢復為檢視狀態值。
4 頁面載入 在此階段,使用檢視狀態和控制元件狀態值設定控制元件屬性。
5 驗證 驗證控制元件的驗證方法被呼叫,並在成功執行時,頁面的IsValid屬性設定為true。
6 回發事件處理 如果請求是回發(舊請求),則呼叫相關的事件處理程式。
7 頁面渲染 在這個階段,頁面和所有控制元件的檢視狀態被儲存。頁面為每個控制元件呼叫Render方法,並將渲染的輸出寫入到頁面的Response屬性的OutputStream類中。
8 卸下/Unload 呈現的頁面被傳送到用戶端,並且頁面屬性(例如響應和請求)被解除安裝,並且所有清理完成。

一個請求的頁面在處理完之後,首先被載入到伺服器的記憶體中,並行送到瀏覽器。 最後它從伺服器記憶體中解除安裝。 ASP.NET在頁面生命週期的每個階段提供方法和事件,我們可以在應用程式中使用。

ASP.NET頁面生命週期事件

在頁面生命週期的每個階段,頁面會引發一些事件,這些事件可以被編碼。 事件處理程式基本上是一個函式或子例程,係結到事件,使用宣告性的屬性,如Onclick或處理控制代碼。

以下是頁面生命週期事件:

編號 事件 描述
1 PreInit PreInit是頁面生命週期中的第一個事件。它檢查IsPostBack屬性並確定頁面是否是回發。它設定主題和主頁面,建立動態控制元件,並獲取和設定組態檔案屬性值。可以通過過載OnPreInit方法或建立Page_PreInit處理程式來處理此事件。
2 Init Init事件初始化控制元件屬性,構建控制元件樹。可以通過過載OnInit方法或建立Page_Init處理程式來處理此事件。
3 InitComplete InitComplete事件允許跟蹤檢視狀態。所有的控制元件都開啟了檢視狀態跟蹤。
4 LoadViewState LoadViewState事件允許將檢視狀態資訊載入到控制元件中。
5 LoadPostData 在這個階段,所有輸入欄位的內容都是用<form>標籤定義的。
6 PreLoad PreLoad發生在回發資料載入到控制元件中之前。可以通過過載OnPreLoad方法或建立Page_PreLoad處理程式來處理此事件。
7 Load 首先為頁面引發Load事件,然後遞回地為所有子控制元件引發Load事件。控制樹中的控制元件已建立。可以通過過載OnLoad方法或建立Page_Load處理程式來處理此事件。
8 LoadComplete 載入過程完成,控制事件處理程式執行,頁面驗證發生。可以通過過載OnLoadComplete方法或建立Page_LoadComplete處理程式來處理此事件。
9 PreRender PreRender事件在輸出呈現之前發生。通過處理此事件,頁面和控制元件可以在輸出呈現之前執行任何更新。
10 PreRenderComplete 由於PreRender事件是為所有子控制元件遞回觸發的,因此此事件將確保完成預渲染階段。
11 SaveStateComplete 頁面上的控制狀態被儲存個性化,控制狀態和檢視狀態資訊被儲存,HTML標記被生成。這個階段可以通過重寫Render方法或建立Page_Render處理程式來處理。
12 UnLoad UnLoad階段是頁面生命週期的最後階段。它遞回地提交所有控制元件的UnLoad事件,最後為頁面本身。最後的清理工作已經完成,所有的資源和參照(如資料庫連線)都被釋放了。可以通過修改OnUnLoad方法或建立Page_UnLoad處理程式來處理此事件。