首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 網頁生命週期事件執行順序完整解析

     編輯:ASP.NET 基礎

頁面生命週期 11 大階段

ASP.NET Web Forms 頁面從請求到回應,會依序觸發下列事件,理解順序對撰寫正確邏輯至關重要:

  1. PreInit:最早階段,適合動態建立控制項、設定 Master Page、Theme、讀取 Profile。注意:回發時 ViewState 尚未還原,控制項屬性值可能被覆寫。
  2. Init:所有控制項初始化完成、外觀套用後觸發,適合讀取/初始化控制項屬性。
  3. InitComplete:頁面初始化完全結束,可處理需等待所有初始化完成的工作。
  4. PreLoad:Load 之前,頁面已載入 ViewState 並處理回發資料。
  5. Load:頁面與所有子控制項遞迴觸發 Load,常用於設定屬性、建立資料庫連線。
  6. 控制項事件:如 Button Click、TextChanged 等。回發時需先檢查 Page.IsValid。
  7. LoadComplete:所有控制項載入完成,可執行需等待其他控制項準備好的工作。
  8. PreRender:輸出前最後修改頁面內容的機會,資料繫結控制項會自動呼叫 DataBind。
  9. SaveStateComplete:ViewState 已儲存,此後修改控制項將被忽略。
  10. Render:非事件,頁面對每個控制項呼叫 Render 輸出 HTML 標記。
  11. Unload:清理資源(關閉連線、檔案、記錄日誌),不可再修改回應串流。

回發時的執行順序實測

點擊按鈕觸發回發時,事件順序為:

OnPreInit → OnInit → OnInitComplete → OnPreLoad → Page_Load → OnLoad 
→ Button_Click → OnLoadComplete → OnPreRender

可見 Button_Click 發生在 OnLoad 之後,這對於理解資料繫結與事件處理時機非常關鍵。

ASP.NET 請求管道 19 個階段

從 IIS 接收請求到回應結束,完整管道事件如下:

  1. BeginRequest - 開始處理請求
  2. AuthenticateRequest - 身分驗證
  3. PostAuthenticateRequest
  4. AuthorizeRequest - 授權檢查
  5. PostAuthorizeRequest
  6. ResolveRequestCache - 取得頁面快取
  7. PostResolveRequestCache
  8. PostMapRequestHandler - 建立頁面物件
  9. AcquireRequestState - 取得 Session(需實作 IRequiresSessionState)
  10. PostAcquireRequestState
  11. PreRequestHandlerExecute - 準備執行頁面
  12. 執行 ProcessRequest
  13. PostRequestHandlerExecute - 頁面執行完成
  14. ReleaseRequestState - 釋放請求狀態
  15. PostReleaseRequestState
  16. UpdateRequestCache - 更新快取
  17. PostUpdateRequestCache
  18. LogRequest - 記錄日誌
  19. PostLogRequest
  20. EndRequest - 請求結束

實作建議

  • 在 Global.asax 或自訂 IHttpModule 中掛鉤管道事件,實作跨領域關注點(日誌、效能監控、安全檢查)
  • 需要存取 Session 的模組必須實作 IRequiresSessionState 或 IReadOnlySessionState
  • 頁面生命週期事件請優先使用 OnXxx 覆寫而非 Page.Xxx += ...,確保執行順序可控
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved