總結一下Page_Load和OnLoad

原始出處

首先Page_Load是一個方法,OnLoad也是一個方法。

OnLoad是Page類繼承自System.Web.UI.TemplateControl,而System.Web.UI.TemplateControl又繼承自System.Web.UI.Control。所以嚴格說來OnLoad是屬於System.Web.UI.Control的一個方法。

同樣Page也有一個Load事件也是相同的繼承自System.Web.UI.Control。

這裏要引入一個@ Page指令中的 AutoEventWireup。當AutoEventWireup=true的時候,頁面會與某些特殊的事件方法綁定,自動識別這些具有特定名稱的事件。這些特定名稱包括:Page_Init, Page_Load, Page_DataBind, Page_PreRender和Page_Unload等。

當true,asp.net不需要顯示的來綁定事件處理程序,它會在運行時自動的根據他們的方法名和簽名綁定事件,對每一個事件,ASP.NET會根據Page_eventname這種模式去搜尋方法,如果沒有找到帶此簽名的事件處理程序,則 ASP.NET 將檢查沒有參數的重載。當時false的時候,則必須顯示綁定事件方法,比如,你有一個Page_Load方法,只有當你這樣寫代碼的時候,纔會觸發事件方法:Page.Load += Page_Load;在這種情況下,方法名稱不必遵循某一模式。考慮性能的時候,則不要將 AutoEventWireup 設置爲 true。 在啓用自動事件連接時,ASP.NET 必須進行 15 到 30 次嘗試,使將事件與方法匹配。

Page的Load事件,準確的說是System.Web.UI.Control的Load事件綁定的是System.Web.UI.Control的OnLoad方法。因此如果在Page頁面裏重寫了OnLoad方法,則此時雖然是用的AutoEventWireup=true,但Page_Load方法也不會被執行。

因此,如果比較考慮性能,建議用override Oneventname方法的方式來實現頁面的事件加載。

System.Web.UI.Control類中有如下幾個方法可供override

 

 protected internal virtual void OnInit(EventArgs e);

 protected internal virtual void OnLoad(EventArgs e);

 protected internal virtual void OnPreRender(EventArgs e);

 protected internal virtual void OnUnload(EventArgs e);

可以如下覆蓋

 protected override void OnLoad(EventArgs e)

    {

        Response.Write("OnLoad<br>");

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章