Aspx 頁面生命週期

2022-02-28 17:59:42 字數 2031 閱讀 7749

asp.net 頁執行時,此頁將經歷乙個生命週期,在生命週期中將執行一系列處理步驟。這些步驟包括初始化、例項化控制項、還原和維護狀態、執行事件處理程式**以及進行呈現。了解頁的生命週期非常重要,這樣就能在合適的生命週期階段編寫**,以達到預期效果。此外,如果開發自定義控制項,則必須熟悉頁生命週期,從而正確地初始化控制項,使用檢視狀態資料填充控制項屬性以及執行所有控制項行為邏輯。(控制項的生命週期基於頁的生命週期,但是頁引發的控制項事件比單獨的 asp.net 頁中可用的事件多。)

一般來說,頁要經歷下表概述的各個階段。除了頁生命週期階段以外,還有在請求前後出現的應用程式階段,但是這些階段並不特定於頁。有關更多資訊,請參見 asp.net 應用程式生命週期概述。

階段說明

頁請求頁請求發生在頁生命週期開始之前。使用者請求頁時,asp.net 將確定是否需要分析和編譯頁(從而開始頁的生命週期),或者是否可以在不執行頁的情況下傳送頁的快取版本以進行響應。

開始在開始階段,將設定頁屬性,如 request 和 response。在此階段,頁還將確定請求是回發請求還是新請求,並設定 ispostback 屬性。此外,在開始階段期間,還將設定頁的 uiculture 屬性。

頁初始化

頁初始化期間,可以使用頁中的控制項,並將設定每個控制項的 uniqueid 屬性。此外,任何主題都將應用於頁。如果當前請求是回發請求,則回發資料尚未載入,並且控制項屬性值尚未還原為檢視狀態中的值。

載入載入期間,如果當前請求是回發請求,則將使用從檢視狀態和控制項狀態恢復的資訊載入控制項屬性。

驗證在驗證期間,將呼叫所有驗證程式控制元件的 validate 方法,此方法將設定各個驗證程式控制元件和頁的 isvalid 屬性。

回發事件處理

如果請求是回發請求,則將呼叫所有事件處理程式。

呈現在呈現期間,檢視狀態將被儲存到頁,然後頁將呼叫每個控制項,以將其呈現的輸出提供給頁的response屬性的 outputstream。

解除安裝完全呈現頁、將頁傳送至客戶端並準備丟棄時,將呼叫解除安裝。此時,將解除安裝頁屬性(如responserequest)並執行清理。

在頁生命週期的每個階段中,頁將引發可執行您自己的**進行處理的事件。對於控制項事件,通過以宣告方式使用屬性(如onclick)或以使用**的方式,均可將事件處理程式繫結到事件。

頁還支援自動事件連線,即,asp.net 將尋找具有特定名稱的方法,並在引發特定事件時自動執行這些方法。如果 @ page 指令的autoeventwireup屬性設定為true(或者如果未定義該屬性,因為預設情況下為true),頁事件將自動繫結至使用page_event 命名約定的方法,如page_loadpage_init。有關自動事件連線的更多資訊,請參見 asp.net web 伺服器控制項事件模型。

下表列出了最常用的頁生命週期事件。實際的事件比列出的事件要多。但是,它們不用於大多數頁處理方案。而是主要由 asp.net 網頁上的伺服器控制項使用,以初始化和呈現它們本身。如果要編寫自己的 asp.net 伺服器控制項,則需要詳細了解這些階段。有關建立自定義控制項的資訊,請參見開發自定義 asp.net 伺服器控制項。

頁事件典型使用

page_preinit

page_init

page_load

control events

執行特定於應用程式的處理:

page_prerender

page_unload

執行最後的清理工作,可能包括:

請注意有關頁生命週期的以下附加資訊:

具體階段執行函式的順序

Aspx 頁面生命週期

asp.net 頁執行時,此頁將經歷乙個生命週期,在生命週期中將執行一系列處理步驟。這些步驟包括初始化 例項化控制項 還原和維護狀態 執行事件處理程式 以及進行 呈現。了解頁的生命週期非常重要,這樣就能在合適的生命週期階段編寫 以達到預期效果。此外,如果開發自定義控制項,則必須熟悉頁生命週期,從而正...

頁面生命週期

如果頁面請求是回發,則在載入檢視狀態階段之後是載入回發資料階段。這個階段會檢查傳送的窗體字段值,並據此更新相應控制項的屬性。例如,通過 post 機制 發出訊號表示 textbox 控制項的名稱和使用者輸入的值 來回送使用者在 textbox web 控制項中輸入的文字。頁面獲得這些值,在控制項層次...

頁面生命週期

page preinit 該事件在初始化階段的開始被呼叫。用於建立動態控制項,動態設定主控件和主題,在呼叫該事件時,控制項的屬性尚未根據檢視狀態賦值。page init 用來對控制項屬性初始化。page initcomplete 頁面初始化完成時觸發。page preload page load 用...