asp.net常規頁生命週期階段列表和事件列表
當我們使用asp.net開發網站,每執行一個頁面,這個頁面都將經歷一個生命週期。瞭解頁的生命週期非常重要,因為這樣我們才能在合適的生命週期編寫程式碼實現預期效果。網上有一句話概括非常精闢:"Do the right thing at the right time in the right place."。微軟的文件給出的ASP.NET生命週期如下:
下面來看看每個階段對應的具體說明:
1、頁請求
頁請求發生在頁生命週期開始之前。使用者請求頁時,asp.net將確定是否需要分析和編譯頁,或者是否可以在不執行頁的情況下,傳送快取版本以進行響應。
2、開始
在開始階段,將設定頁屬性,如Request和Response。在此階段,頁還將確定請求是回發請求還是新請求,並設定ispostback屬性。此外,在開始階段期間,將設定頁的UICulture屬性。
3、頁初始化
該階段,可以使用頁中的控制元件,並將設定每個控制元件的UniqueID屬性。此外,任何主題都將應用於頁。如果當前請求是回發請求,則回發資料尚未載入,並且控制元件屬性值尚未還原為檢視狀態中的值。
4、載入
該階段,如果當前請求是回發請求,則將使用從檢視狀態和控制元件狀態恢復的資訊載入控制元件屬性。
5、驗證
在驗證期間,將呼叫所有驗證控制元件的Validate方法,此方法將設定各個驗證程式控制元件和頁的IsValid屬性。
6、回發事件處理
如果請求是回發事件,則將呼叫所有事件處理程式。
7、呈現
在呈現期間,檢視狀態將被儲存到頁,然後頁將呼叫每個控制元件,以將其呈現的輸出提供給頁的Response屬性的OutPutStream。
8、解除安裝
完全呈現頁將頁傳送至客戶端並準備丟棄時,將呼叫解除安裝。此時,將解除安裝頁屬性如Request,Response等,並進行清理。
二、生命週期事件列表(常見)
1、Page_PreInit
典型應用:
使用IsPostBack屬性確定是否是第一次處理該頁;
建立或者重新建立動態控制元件;
動態設定母版頁;
動態設定Theme屬性;
讀取或者設定配置檔案屬性值。
注意:如果請求是回發請求,則控制元件的值尚未從檢視狀態還原。如果在此階段設定控制元件屬性,則值可能會在下一階段被改寫。
2、Page_Init
典型應用:
讀取或初始化控制元件屬性
3、Page_Load
典型應用:
讀取或更新控制元件屬性
4、Controlevents
典型應用:
執行特定於應用程式的處理:
如果頁包含驗證程式控制元件,則在執行任何處理之前堅持頁和各個驗證控制元件的IsValid屬性;
處理特定事件,如Button的Click事件
5、Page_PreRender
典型應用:
對頁的內容進行最後更改
6、Page_Unload
典型應用:
執行最後的清理工作,可能包括:
關閉開啟的檔案和資料庫連線;
完成日誌記錄或其它特定於請求的任務。
這個事件裡要注意:因為在解除安裝階段,頁及其控制元件已被呈現,因此無法對響應流做進一步更改。如果嘗試呼叫方法如Response.Write方法,則該頁會引發異常。
好了,最後來一個經典的程式碼例項來回顧一下前面講的主要內容。Code is cheap。看程式碼了:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 Page Request --頁面請求
2 Start --開始
3 Page Initialization --頁初始化
4 Load --載入
5 Validation --驗證
6 Postback event handling --回發事件處理
7 Rendering --呈現
8 Unload --解除安裝
一、生命週期階段列表Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 Page Request --頁面請求
2 Start --開始
3 Page Initialization --頁初始化
4 Load --載入
5 Validation --驗證
6 Postback event handling --回發事件處理
7 Rendering --呈現
8 Unload --解除安裝
下面來看看每個階段對應的具體說明:
1、頁請求
頁請求發生在頁生命週期開始之前。使用者請求頁時,asp.net將確定是否需要分析和編譯頁,或者是否可以在不執行頁的情況下,傳送快取版本以進行響應。
2、開始
在開始階段,將設定頁屬性,如Request和Response。在此階段,頁還將確定請求是回發請求還是新請求,並設定ispostback屬性。此外,在開始階段期間,將設定頁的UICulture屬性。
3、頁初始化
該階段,可以使用頁中的控制元件,並將設定每個控制元件的UniqueID屬性。此外,任何主題都將應用於頁。如果當前請求是回發請求,則回發資料尚未載入,並且控制元件屬性值尚未還原為檢視狀態中的值。
4、載入
該階段,如果當前請求是回發請求,則將使用從檢視狀態和控制元件狀態恢復的資訊載入控制元件屬性。
5、驗證
在驗證期間,將呼叫所有驗證控制元件的Validate方法,此方法將設定各個驗證程式控制元件和頁的IsValid屬性。
6、回發事件處理
如果請求是回發事件,則將呼叫所有事件處理程式。
7、呈現
在呈現期間,檢視狀態將被儲存到頁,然後頁將呼叫每個控制元件,以將其呈現的輸出提供給頁的Response屬性的OutPutStream。
8、解除安裝
完全呈現頁將頁傳送至客戶端並準備丟棄時,將呼叫解除安裝。此時,將解除安裝頁屬性如Request,Response等,並進行清理。
二、生命週期事件列表(常見)
1、Page_PreInit
典型應用:
使用IsPostBack屬性確定是否是第一次處理該頁;
建立或者重新建立動態控制元件;
動態設定母版頁;
動態設定Theme屬性;
讀取或者設定配置檔案屬性值。
注意:如果請求是回發請求,則控制元件的值尚未從檢視狀態還原。如果在此階段設定控制元件屬性,則值可能會在下一階段被改寫。
2、Page_Init
典型應用:
讀取或初始化控制元件屬性
3、Page_Load
典型應用:
讀取或更新控制元件屬性
4、Controlevents
典型應用:
執行特定於應用程式的處理:
如果頁包含驗證程式控制元件,則在執行任何處理之前堅持頁和各個驗證控制元件的IsValid屬性;
處理特定事件,如Button的Click事件
5、Page_PreRender
典型應用:
對頁的內容進行最後更改
6、Page_Unload
典型應用:
執行最後的清理工作,可能包括:
關閉開啟的檔案和資料庫連線;
完成日誌記錄或其它特定於請求的任務。
這個事件裡要注意:因為在解除安裝階段,頁及其控制元件已被呈現,因此無法對響應流做進一步更改。如果嘗試呼叫方法如Response.Write方法,則該頁會引發異常。
好了,最後來一個經典的程式碼例項來回顧一下前面講的主要內容。Code is cheap。看程式碼了:
Code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
///
/// 新建一個aspx頁面,名稱Default.aspx
///
public partial class Default : System.Web.UI.Page
{
protected void Page_PreInit(object sender, EventArgs e)
{
Response.Write("Page_PreInit
");
}
protected void Page_Init(object sender, EventArgs e)
{
Response.Write("Page_Init
");
}
protected void Page_InitComplete(object sender, EventArgs e)
{
Response.Write("Page_InitComplete
");
}
protected void Page_PreLoad(object sender, EventArgs e)
{
Response.Write("Page_PreLoad
");
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Page_Load
");
}
protected void Page_LoadComplete(object sender, EventArgs e)
{
Response.Write("Page_LoadComplete
");
}
protected void Page_PreRender(object sender, EventArgs e)
{
Response.Write("Page_PreRender
");
}
protected void Page_SaveStateComplete(object sender, EventArgs e)
{
Response.Write("Page_SaveStateComplete
");
}
///
/// 因為在解除安裝階段,頁及其控制元件已被呈現,因此無法對響應流做進一步更改。如果嘗試呼叫方法如Response.Write方法,則該頁會引發異常。
///
///
///
protected void Page_Unload(object sender, EventArgs e)
{
int i = 0;
i++;//這行程式碼是用來設定斷點的,為什麼不用Response.Write? *****
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "ControlEvent";
Response.Write("Button事件觸發!
");
}
}
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
///
/// 新建一個aspx頁面,名稱Default.aspx
///
public partial class Default : System.Web.UI.Page
{
protected void Page_PreInit(object sender, EventArgs e)
{
Response.Write("Page_PreInit
");
}
protected void Page_Init(object sender, EventArgs e)
{
Response.Write("Page_Init
");
}
protected void Page_InitComplete(object sender, EventArgs e)
{
Response.Write("Page_InitComplete
");
}
protected void Page_PreLoad(object sender, EventArgs e)
{
Response.Write("Page_PreLoad
");
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Page_Load
");
}
protected void Page_LoadComplete(object sender, EventArgs e)
{
Response.Write("Page_LoadComplete
");
}
protected void Page_PreRender(object sender, EventArgs e)
{
Response.Write("Page_PreRender
");
}
protected void Page_SaveStateComplete(object sender, EventArgs e)
{
Response.Write("Page_SaveStateComplete
");
}
///
/// 因為在解除安裝階段,頁及其控制元件已被呈現,因此無法對響應流做進一步更改。如果嘗試呼叫方法如Response.Write方法,則該頁會引發異常。
///
///
///
protected void Page_Unload(object sender, EventArgs e)
{
int i = 0;
i++;//這行程式碼是用來設定斷點的,為什麼不用Response.Write? *****
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "ControlEvent";
Response.Write("Button事件觸發!
");
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-580654/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- asp.net 頁面 生命週期ASP.NET
- ASP.NET頁面生命週期與應用程式生命週期ASP.NET
- Asp.Net頁面生命週期(二)ASP.NET
- Solidity的生命週期包含哪些階段?Solid
- 深入React的生命週期(上):出生階段(Mount)React
- <react學習筆記(4)>元件的生命週期(執行階段和銷燬階段)以及事件處理函式React筆記元件事件函式
- Spring Bean各階段生命週期的介紹SpringBean
- React 元件的生命週期可以分為哪些階段React元件
- Omi教程-生命週期和事件處理事件
- 【UniApp】-uni-app-OptionAPI應用生命週期和頁面生命週期APPAPI
- 【Michael Xu】ASP.NET AJAX 客戶端生命週期事件ASP.NET客戶端事件
- react 學習--元件的生命週期(二)執行階段React元件
- react 學習--元件的生命週期(三)銷燬階段React元件
- 【UniApp】-uni-app-CompositionAPI應用生命週期和頁面生命週期APPAPI
- HttpApplication,HttpModule,HttpContext及Asp.Net頁生命週期HTTPAPPContextASP.NET
- 【連載】淺析React生命週期之一:掛載階段React
- react 學習--元件的生命週期(一)初始化階段React元件
- 生命週期階段與外掛目標的繫結關係
- PbootCMS內容和列表頁呼叫tags列表boot
- eslint常見規則列表EsLint
- 非同步載入在Vue生命週期哪個階段更合理非同步Vue
- ArkTS 頁面和自定義元件生命週期元件
- 元件規範和生命週期——react文件翻譯元件React
- C# 11頁面生命週期C#
- 微信小程式頁面的生命週期微信小程式
- 記憶體頁生命週期下降記憶體
- 鴻蒙Navigation頁面生命週期鴻蒙Navigation
- JAVA面試題 執行緒的生命週期包括哪幾個階段?Java面試題執行緒
- 在K8S中,PV 生命週期內的有哪些階段?K8S
- Oracle事件列表Oracle事件
- React 渲染 和 生命週期React
- asp.net core服務的生命週期ASP.NET
- 品牌生命週期和產品生命週期之間的關係
- 生命週期
- 用生命週期規範元件化流程元件化
- React元件的狀態及生命週期事件React元件事件
- ReactJS 生命週期、資料流與事件ReactJS事件
- MyBatis 作用域和生命週期MyBatis