2011-03-28 62 views
0

我有一個頁面基類(.NET4)base.onload(E):爲什麼需要自定義頁面基類

public class SitePageBase : System.Web.UI.Page 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
    } 
} 

和派生類

public partial class WebsitePage : SitePageBase 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // some processing 
    } 
} 

我查了 「的Page_Load」在派生類中,只有在基類的OnLoad事件處理程序中存在「base.OnLoad(e)」時纔有效。否則,派生類中的「Page_Load」根本不會被解僱。

任何人都可以告訴我,爲什麼會發生這種情況?

P.S. AutoEventWireup設置爲true。

回答

1

因爲你重寫基類的行爲處理的事件,如果你不叫base.OnLoad(e)那麼基類將不會繼續它的實現(在這種情況下,提高Load事件)

在你的情況,如果你不是在OnLoad做任何事情,你可以刪除方法都在一起,或者像我一樣在覆蓋OnLoad刪除Page_Load,做你的負荷登錄

這些都是值得一讀

+0

感謝您的解釋。我在那裏沒有做任何事情。所以剛剛從基類中刪除它。再次感謝 – user680505 2011-03-29 17:40:20

0

很明顯,它是引發Load事件的基地的OnLoad函數。如果您不調用基地的OnLoad函數,則0123'事件不會引發,您的Page_Load事件處理程序也不會被調用。

0

由於在onload方法的基實現火災由Page_Load中

0

通常的On<Event>的基礎版本看起來有點像這樣:

protected virtual void OnLoad(EventArgs e) 
{ 
    if(Loaded != null) 
     Loaded(this, e); 
} 

所以,換句話說,基本成員是實際發生事件的那個人。

0

將AutoEventWireup設置爲false,爲我解決了問題:)

相關問題