asp.net頁面生命週期

asp.net頁面生命週期:

1.調用FrameworkInitialize()方法初始化頁面,創建控件樹。

(以下是管道第十一個事件)

2.然後正式開始頁面的生命週期:

 2.1 設置IsPostBack屬性的值。

 2.2 觸發PreInit事件,在該事件中已經可以使用IsPostBack屬性了,在這個事件中還不能訪問ViewState
     --應用母版頁,應用皮膚

 2.3 觸發Init()事件。遞歸觸發Init(),
 //先觸發頁面中的每個控件的Init()事件,最後再觸發頁面自己的Init()事件。
     --當頁面的Init()事件被觸發完畢後,然後調用TrackViewState()方法,
     //開始ViewState跟蹤,然後就可以向ViewState中寫入數據了,
     //但是上次ViewState中的值,現在還獲取不到。
 
 2.4調用了LoadAllState()方法,這個方法的作用就是獲取用戶提交過來的
 //隱藏域中的值,讓後解析該值,並加載到ViewState集合中,
 //然後我們就可以在ViewState集合中獲取數據了。
 
 2.5調用了ProcessPostData(_requestValueCollection,true)方法。
    --在這個方法中主要做了兩件事:
    --1>根據用戶提交過來的數據,判斷某個服務器端控件的數據是否發生了改變,
    //如果發生了改變,則把該控件加到一個_changedPostDataConsumers集合中,
    然後在後續的步驟中,會依次觸發這些控件的改變事件。
    --2>把那些服務器端控件提交過來的值,通過Request獲取到,
    //然後設置到某個控件中。比如:this.textBox1.Text=Request["textBox1"];。
    //然後在後續的事件中就可以通過this.textBox1.Text來獲取文本框中的值了。


 2.6觸發Page_PreLoad事件,頁面加載事件之前的一個事件。

 2.7遞歸觸發頁面的Page_Load事件,然後再觸發頁面上每個控件的Load事件。

 2.8.第二次調用ProcessPostData(_leftOverPostData,false)方法。
 //第二個參數表示是在頁面加載之前調用的ProcessPostData()方法,
 //還是在頁面加載時候調用該方法。

 2.9調用RaiseChangedEvents()方法觸發元素的改變事件。

 2.10調用RaisePostBackEvent()觸發頁面上的所有其他服務器控件的所有其他回發事件。

 2.11觸發Page_LoadComplete事件。

 2.12觸發Page_PreRender事件。

 2.13觸發Page_PreRenderComplete事件。

 2.14調用SaveAllState()方法,保存ViewState數據。

 2.15觸發Page_SaveStateComplete事件。

 2.16調用RenderControl()方法開始執行渲染,
 //把服務器端標籤生成對應的html標籤。

 2.17觸發Page_Unload卸載頁面。

(下接管道第十二個時間)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章