我有一个页面基类(.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。
答案 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,这解决了我的问题:)