为什么base.onload(e)需要自定义页面基类

时间:2011-03-28 15:50:52

标签: c# asp.net

我有一个页面基类(.NET4):

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。

5 个答案:

答案 0 :(得分:1)

因为您要覆盖基类的行为,并且如果不调用base.OnLoad(e),那么基类将不会继续它的实现(在这种情况下引发Load事件)< / p>

在您的情况下,如果您未在OnLoad中执行任何操作,则可以一起删除该方法,或者删除Page_Load并在覆盖的OnLoad <中执行加载登录/ p>

值得一读

答案 1 :(得分:0)

显然,基础的OnLoad函数会引发Load事件。如果您不调用base OnLoad函数,则不会引发Load事件,并且永远不会调用您的Page_Load事件处理程序。

答案 2 :(得分:0)

因为OnLoad方法的基本实现会触发由Page_Load处理的事件

答案 3 :(得分:0)

通常On<Event>的基本版本看起来有点像这样:

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

换句话说,基本成员实际上是触发事件的成员。

答案 4 :(得分:0)

将AutoEventWireup设置为false,这解决了我的问题:)