以前寫jsp時 使用者輸入頁面是一頁,處理使用者輸入的又是是一個頁面.因為http的無狀態性我們只能夠通過get和post方式向伺服器發送請求的資料.可是到了asp.net我們不需要為接收使用者輸入資料,處理使用者資料而單獨寫一個頁面了,我們只需要雙擊提交按鈕,在後台寫上相應的處理代碼就可以了,使用者輸入的資料我們也可以象在寫windows程式似的直接存取了.
我就一直納悶來著他是怎麼實現的呀,尤其是那個什麼IsPostBack(表示是否是第一次訪問這個頁面)這常用的屬性我就不知道它是怎麼被設定的.狠了狠心在網上找了找,準備把它徹底弄清楚.找到了一片英文文章,我覺得不錯.http://aspalliance.com/articleViewer.aspx?aId=134&pId.可是本人英文水平有限沒能力翻譯,在在這裡只是把自己的理解寫下來,就當是拋磚引玉吧.還希望那位牛人給好好翻譯一下.
asp.net頁面事件執行順序:
一.初始化部分:
1.建構函式:建立page類的一個執行個體,初始化page類的屬性.
2.AddParsedSubObject函數:
protected virture void AddParsedSubObject(Object obj)
提取aspx檔案中的伺服器控制項,並把它們添加到page的ControlCollection中.你可以通過Page.Controls獲得載入的所有伺服器控制項
3.DeterminePostBackMode函數:
protected internal virtual NameValueCollection DeterminePostBackMode ()
返回:NameValueCollection包含了使用者通過get或post方式發送過來的資料,如果是第一次請求將返回空.VIEWSTATE 和 EVENTTARGET這兩個隱藏的表單欄位將協助我們來判斷是否是第一次請求. 在調用這個事件後ispostback的將會被設定.
4.OnInit函數:
protected internal override void OnInit (EventArgs e)
調用init事件,初始化page中的所有控制項為它們的預設值(你在aspx頁面中設定的值,viewstate中值這時並不會被設定到控制項上)
二.非第一次請求的進一不初始化:
1.LoadPageStateFromPersistenceMedium函數:
protected internal virtual Object LoadPageStateFromPersistenceMedium ()
裝載viewstate資訊到page對象中(這時並沒有把獲得的值設定給相應的控制項)
2.LoadViewState函數:
protected virtual void LoadViewState (Object savedState)
為控制項重建立立viewstate資訊
3.ProcessPostData函數:
一個私人方法,無法訪問
擷取使用者輸入的資料,並把它們對應到相應控制項的屬性上
//至此頁面中的所用控制項的屬性都被裝載了,下面該相應你的事件了
三.事件處理部分
1.OnLoad:
protected internal virtual void OnLoad (EventArgs e)
調用page_load方法為指定頁面資訊,如執行資料庫查詢,指定本地變數屬性.(也就是我們常寫的那個Page_load事件)
四.非第一次請求需要執行的函數用以調用你你編寫的各個事件:
1.ProcessPostData:再次調用ProcessPostData函數主要是處理在Page_Load事件中動態建立的控制項的資料資訊
2.RaiseChangedEvents:響應控制項屬性改變事件
3.RaisePostBackEvent:響應按鈕的提交事件
五.處理OnPreRender事件:
在頁面傳給瀏覽器之前,修改控制項屬性的最後機會
六.至此頁面的內容就不可能被修改了,下面該為下一次使用者的postback準備條件和產生相應的html檔案了
1.SaveViewState:由於事件中可能改變了伺服器控制項中的屬性,因此我們需要更改的資訊到viewstate中
2.SavePageStateToPersistenceMedium:為頁面儲存viewstate狀態資訊,也就是將上面獲得的viewstat對象儲存到隱藏欄位或session中
3.Render:建立html檔案並把它發送到瀏覽器
4.Unload:釋放相應的資源,如資料庫連接,檔案控制代碼等
就這麼多了,不足之處還希望大夥指點.共同學習是我們的目標