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

ASP.NET 頁面生命週期事件執行順序實測

     編輯:ASP.NET 基礎

實驗環境建立

  1. 建立 C# Web Forms 專案。
  2. Default.aspx 放一個 Button,訂閱 Init、Load、PreRender、Unload 並在各處打中斷點。
  3. Global.asax 打中斷點於 Application_Start、Session_Start、Application_End、Session_End。
  4. 母版頁 Site.Master 的 Page_Load 打中斷點。
  5. F5 偵錯,點擊按鈕觀察呼叫堆疊順序。

觀察到的執行順序

1. Application_Start          (IIS 啟動網站,僅一次)
2. Session_Start              (新 Session 建立)
3. Button1_Init               (所有控件 Init,遞歸由外而內)
4. Page_Load (Default.aspx)   (內容頁面 Load)
5. Page_Load (Site.Master)    (母版頁面 Load)
6. Button1_Load               (控件 Load)
7. Button1_PreRender          (控件 PreRender)
8. Button1_Unload             (控件 Unload)
9. Render 階段輸出 HTML       (介面呈現)
...
關閉 IIS 時:
10. Session_End               (Session 逾時或放棄)
11. Application_End           (應用程式關閉)

關鍵階段解析

階段典型事件主要用途
初始化Init, InitComplete建立控件樹、設定靜態屬性、動態加入控件、ViewState 尚未回復。
載入Load, LoadCompleteViewState/ControlState 已回復,可存取表單資料、資料繫結、業務邏輯。
預渲染PreRender, PreRenderComplete最後修改輸出內容的機會(如資料重繫、權限控制顯隱),ViewState 即將序列化。
釋放Unload釋放非受控資源(檔案控制代碼、資料庫連線、大型物件),不可再存取 Response。

母版頁與內容頁互動順序

  1. 內容頁 Page_Init
  2. 母版頁 Page_Init
  3. 內容頁 Page_Load
  4. 母版頁 Page_Load
  5. 控件 Load...

母版頁 Load 晚於內容頁,因此內容頁 Load 中若需存取母版頁控件,請改用 Page.LoadComplete 或母版頁公開屬性/方法。

實務建議

  • 資料繫結放在 Load 或 LoadComplete,避免在 Init 讀取 ViewState 前的值。
  • 大量記憶體物件(DataTable、串流)在 Unload 或 Dispose 釋放。
  • 動態控件必須在 Init 階段重建,否則 ViewState 無法對應。
  • 非必要勿在 PreRender 後修改控件集合,否則 ViewState 序列化會出錯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved