以按鈕事件為測試標准
1. OnPreInit
//檢查 IsPostBack 屬性來確定是不是第一次處理該頁。
//創建或重新創建動態控件。
//動態設置主控頁。
//動態設置 Theme 屬性。
//讀取或設置配置文件屬性值。
//注意
//如果請求是回發請求,則控件的值尚未從視圖狀態還原。如果在此階段設置控件屬性,則其值可能會在下一事件中被重寫。
2. OnInit
//在所有控件都已初始化且已應用所有外觀設置后引發。使用該事件來讀取或初始化控件屬性。
3. OnInitComplete
//由 Page 對象引發。使用該事件來處理要求先完成所有初始化工作的任務。
4. OnPreLoad
//如果需要在 Load 事件之前對頁或控件執行處理,請使用該事件。
//在 Page 引發該事件后,它會為自身和所有控件加載視圖狀態,然后會處理 Request 實例包括的任何回發數據。
5. Page_Load
這個要理解,因為我們很多操作需要在這個事件上完成,比如說form的表單提交,我們需要在這個來驗證
Page_Load,即頁面載入要執行的事件;
Page_Load的執行分為兩種情況;
1.Page_Load事件的執行是在第一次加載頁面時發生(即為了響應客戶的請求);
2.Page_Load事件的執行是在把該頁面回發到服務器時發生;
ASP.NET處理重新頁面的時候都要重新執行Page_Load;
即重建Page類,而Page_Load是重建頁面第一個要執行的事件;
所以無論何種情況都會執行Page_Load,這時就有必要判斷一下服務器處理Page_Load事件時是在何種情況發生;
而Page.IsPostBack正好解決了這個問題;
當是第一種情況的時候(為了響應客戶的請求)Page.IsPostBack返回false;
當是第二種情況的時候(把該頁面回發到服務器給服務器處理時)Page.IsPostBack返回True;
所以正確應用好Page.IsPostBack能大大的提高應用程序的性能;
每當點擊ASP.NET的Web網頁上的Button、LinkButton或ImageButton等控件時,表單就會被發送到服務器上。如果某些控件的AutoPostBack屬性被設置為true,那么當該控件的狀態被改變后,也會使表單會發送回服務器。(AutoPostBack屬性,它只有兩個bool值,true/false。如果這個屬性被設置成false,那么點擊后就不會立刻將變化傳給服務器處理,也就不會有該控件的SelectedIndexChanged事件。)
6. OnLoad
//Page 在 Page 上調用 OnLoad 事件方法,然后以遞歸方式對每個子控件執行相同操作,如此循環往復,直到加載完本頁和所有控件為止。
//使用 OnLoad 事件方法來設置控件中的屬性並建立數據庫連接。
7. Button_Click
/用這些事件來處理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。
//注意
//在回發請求中,如果頁包含驗證程序控件,請在執行任何處理之前檢查 Page 和各個驗證控件的 IsValid 屬性。
8. OnLoadComplete
//對需要加載頁上的所有其他控件的任務使用該事件。
9. OnPreRender
//在該事件發生前:
//Page 對象會針對每個控件和頁調用 EnsureChildControls。
//設置了 DataSourceID 屬性的每個數據綁定控件會調用 DataBind 方法。有關更多信息,請參見下面的數據綁定控件的數據綁定事件。
//頁上的每個控件都會發生 PreRender 事件。使用該事件對頁或其控件的內容進行最后更改。
10.OnSaveStateComplete
//在該事件發生前,已針對頁和所有控件保存了 ViewState。將忽略此時對頁或控件進行的任何更改。
//使用該事件執行滿足以下條件的任務:要求已經保存了視圖狀態,但未對控件進行任何更改。
11.特殊的Render
//在處理的這個階段,Page 對象會在每個控件上調用此方法。所有 ASP.NET Web 服務器控件都有一個用於寫出發送給瀏覽器的控件標記的 Render 方法。
12.OnUnload
//該事件首先針對每個控件發生,繼而針對該頁發生。在控件中,使用該事件對特定控件執行最后清理,如關閉控件特定數據庫連接。
//對於頁自身,使用該事件來執行最后清理工作,如:關閉打開的文件和數據庫連接,或完成日志記錄或其他請求特定任務。
//注意:在卸載階段,頁及其控件已被呈現,因此無法對響應流做進一步更改。如果嘗試調用方法(如 Response.Write 方法),則該頁將引發異常。
總結:
一般我們在page頁面中,需要有一次連接數據庫,並且有一次卸載(斷開)數據庫的操作,這是十分重要的一個過程和必要的操作。所以我們可以根據這些事件的特殊的執行順序,實現我們需要的功能。
例如我喜歡在OnInit中連接數據庫,並且給與一個Unload事件來斷開數據庫的連接。而單個頁面中的加載事件,我比較喜歡放在Page_Load操作。如以下代碼
protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack == true) //二次加載 { } else { //首次加載 } }
End