2011-03-28 31 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,为我解决了问题:)

相关问题