ASP.NET 頁面從請求到回應經歷嚴格的生命週期階段,理解各事件觸發順序與 ViewState 載入時機,是撰寫正確邏輯、避免常見 Bug 的關鍵。
Init 事件由內而外觸發(子控件先於父控件)Page_Load 觸發,ViewState 已可用,PostBack 時控件狀態已還原| 需求 | 最佳階段 | 原因 |
|---|---|---|
| 動態建立控件 | PreInit / Init | 確保參與 ViewState 追蹤 |
| 讀取/修改 ViewState | Load 之後 | LoadViewState 在 Load 前完成 |
| 資料繫結 | Load / PreRender | Load 適合首次繫結,PreRender 適合修改後重繫 |
| 修改輸出 HTML | PreRender / Render | Render 階段直接操作 HtmlTextWriter |
| 釋放非託管資源 | Unload / Dispose | 頁面銷毀前最後機會 |
<%@ Page AutoEventWireup="true" %> <!-- 預設開啟 -->
Page_Load、Page_Init 等標準命名方法this.Load += Page_Load; 註冊,效能略佳PreInit 或 InitLoad 或之後DataBind()