2013-07-21 27 views
0

我在ASP.NET基頁/派生頁事件模型

寫入以下代碼我有一個基頁:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write("Base Page Called"); 

    } 

我有一個派生頁具有下面的代碼:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write("Derived Page Called"); 

    } 

現在,當我調用派生頁面時,它不調用基頁的Page_Load。它顯示

「派生頁面調用」。

現在,如果我將Derived頁面Load事件處理程序名稱更改爲「Page1_Load」,並且執行如下,則將調用Base頁面。

protected void Page1_Load(object sender, EventArgs e) 
    { 
     Response.Write("Derived Page Called"); 


    } 

「Base Page Called」。

這種行爲的原因是什麼?

回答

1

如果存在帶Page_Load名稱的方法,則Page_Load會自動連線,因此如果您在派生類中定義了一個方法,它將隱藏該方法。但是,它必須按名稱匹配,所以通過在派生類中給出一個後綴,它不再隱藏基本實現,因此它將拾取基本實現並使用它。

如果你把Page1_Load的基礎,以及,你將得不到任何輸出

Base: 
protected virtual void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write("Base Page Called"); 

    } 

Derived: 

protected override void Page_Load(object sender, EventArgs e) 
{ 
    base.Page_Load(); 
    Response.Write("Derived Page Called"); 
} 

試試上面的,如果你想既被稱爲

+0

隱藏手段覆蓋?有沒有什麼辦法,以便我可以自動調用基頁的頁面加載觸發,而派生頁面在ASP.NET中加載? – user1672097

+0

沒有隱藏意味着隱藏它,就好像它從來沒有存在過。您可以在基礎虛擬中創建一個,然後在派生類中重寫它。嘗試我的更新建議 – TGH

+0

但爲了隱藏,我們需要新的關鍵字? – user1672097