ASP.NET生命周期详解(转)
(1)請求頁面:頁請求發生在頁生命周期開始之前。
(2)開始:在開始階段,將設置頁屬性,如Request和Response。在此階段,頁還將確定請求是回發請求還是新請求,并設置IsPostBack屬性。
(3)初始化頁面:頁面初始化期間,可以使用頁中的控件,并將設置每個控件的UniqueID屬性。如果當前請求是回發請求,則回發數據尚未加載,并且控件屬性值尚未還原為視圖狀態中的值。
(4)加載頁面:加載期間,如果當前請求是回發請求,則將使用從視圖狀態和控件狀態恢復的信息加載控件屬性。
(5)驗證:在驗證期間,將調用所有驗證程序控件的Validate方法,此方法將設置各個驗證程序控件和頁的IsValid屬性。
(6)回發事件處理:如果請求是回發請求,則將調用所有事件處理程序。
(7)呈現頁面:在頁面呈現期間,視圖狀態將被保存到頁面,然后頁面將調用每個控件,以將其呈現的輸出提供給頁的Response屬性的OutputStream。
(8)卸載頁面:完全呈現頁、將頁發送至客戶端并準備丟棄時,將調用卸載。此時,將卸載頁屬性(如Response和Request)并執行清理。
與上面的生命周期相對應的Page類的生命周期事件如圖所示。
Page類生命周期中各個事件的說明如表所示。
| 事 件 | 說 明 |
| Init | 當服務器控件初始化時發生;初始化是控件生存期的第一步 |
| InitComplete | 在頁初始化完成時發生 |
| PreInit | 在頁初始化開始時發生 |
| Load | 當服務器控件加載到Page對象中時發生 |
| LoadComplete | 在頁生命周期的加載階段結束時發生 |
| PreLoad | 在頁Load事件之前發生 |
| PreRender | 在頁面加載控件對象之后、呈現之前發生 |
| PreRenderComplete | 在呈現頁內容之前發生 |
| UnLoad | 當服務器控件從內存中卸載時發生 |
| Disposed | 當從內存釋放服務器控件時發生,這是服務器控件生存期的最后階段 |
代碼:
public partial class _Default : System.Web.UI.Page{protected int i = 1;protected void Page_PreInit(object sender, EventArgs e){Response.Write(i + ".PreInit:當頁面初始化開始時發生");i++;Response.Write("<br>");}protected void Page_Init(object sender, EventArgs e){Response.Write(i + ".Init:當服務器空間初始化時發生");i++;Response.Write("<br>");}protected void Page_InitComplete(object sender, EventArgs e){Response.Write(i + ".InitComplete:當頁初始化完成時發生");i++;Response.Write("<br>");}protected void Page_PreLoad(object sender, EventArgs e){Response.Write(i + ".PreLoad:當頁load事件前發生");i++;Response.Write("<br>");}protected void Page_Load(object sender, EventArgs e){Response.Write(i + ".Load:當服務器控件加載到Page對象中時發生(加載頁面時)");i++;Response.Write("<br>");//在Load和LoadComplete之間會執行控件事件.//如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。}protected void Page_LoadComplete(object sender, EventArgs e){Response.Write(i + ".LoadComplete:當頁面生命周期的加載階段結束時發生");i++;Response.Write("<br>");}protected void Page_PreRender(object sender, EventArgs e){Response.Write(i + ".PreRender:當頁加載控件之后,呈現之前發生,使用該事件對頁或其控件的內容進行最后更改(預呈現)");i++;Response.Write("<br>");}protected void Page_PreRenderComplete(object sender, EventArgs e){Response.Write(i + ".PreRenderComplete:呈現內容前發生.(預呈現完成)");i++;Response.Write("<br>");}protected void Page_SaveStateComplete(object sender, EventArgs e){/*網頁上控件的狀態信息是在 PreRenderComplete 事件后保存的。在SaveStateComplete事件之前用Trace查看頁時其實在該事件前還有一個SaveState事件,只是這里無法演示.注意:SaveStateComplete 事件在將頁和頁上控件的視圖狀態和控件狀態保存到持久性介質之后引發。這是在頁被呈現到請求瀏覽器之前引發的最后一個事件。*/Response.Write(i + ".SaveStateComplete:在頁已完成對頁和頁上控件的所有視圖狀態和控件狀態信息的保存后發生.");i++;Response.Write("<br>");/*最后一部操作呈現:Render:它不是事件;在處理的這個階段,Page 對象會在每個控件上調用此方法Render()。所有 ASP.NET Web 服務器控件都有一個用于寫出發送給瀏覽器的控件標記的 Render 方法。*//*當你關閉頁面的時候就會引發UnLoad(當服務器控件從內存中卸載時發生)和Disposed兩事件(當從內存釋放服務器控件時發生,這是服務器控件生存期的最后階段)首先加載UnLoad事件:卸載頁面:完全呈現頁、將頁發送至客戶端并準備丟棄時,將調用卸載。此時,將卸載頁屬性(如Response和Request)并執行清理.最后加載Disposed事件,釋放資源,生命周期結束.... */}} 結果Trace圖:
總結
以上是生活随笔為你收集整理的ASP.NET生命周期详解(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT草根的江湖之路之六:曙光,第一次破例
- 下一篇: iptables透明网桥无法使用透明代理