如果AutoEventWireup
属性设置为false
,则需要手动连接事件。但是,我似乎无法启动Page_PreInit
。我猜我可能会让连线发生得太晚(一旦我们已经过了Page_PreInit
),但我不确定在哪里放置连线。
例如......
protected override void OnInit(EventArgs e)
{
base.OnInit(e)
PreInit += new EventHandler(Page_PreInit);
Load += new EventHandler(Page_Load);
}
protected void Page_PreInit(object sender, EventArgs e)
{
Response.Write("Page_PreInit event fired!<br>"); //this is never reached
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Page_Load event fired!<br>");
}
上面的代码会导致“Page_Load事件被触发!”正在显示,但Page_PreInit
没有。我在连线之前和之后尝试了base.OnInit(e)
,这没有效果。
显示的图表here表示OnInit
方法实际上出现在PreInit
事件之后。考虑到这一点,我尝试重写OnPreInit
并做同样的事情 - 没有效果。
MSDN文章here明确指出,如果AutoEventWireup
设置为false
,则事件可以覆盖OnInit
。他们使用的示例是Page_Load
,当然它就像对我一样,但它们没有说明这似乎不适用于Page_PreInit
事件。
我的问题是:在Page_PreInit
设置为AutoEventWireup
的情况下,如何将false
事件连接起来?
我了解MSDN page上列出的替代方法,例如使用网页的构造函数。我想具体了解他们如何使用OnInit
建议。
答案 0 :(得分:10)
OnPreInit()方法的基本实现负责引发PreInit
事件。由于您的覆盖在注册PreInit
处理程序之前调用该实现,因此确实不会调用它。
在注册处理程序后尝试调用基类'method :
protected override void OnPreInit(EventArgs e)
{
PreInit += new EventHandler(Page_PreInit);
Load += new EventHandler(Page_Load);
// And only then:
base.OnPreInit(e);
}
答案 1 :(得分:0)
在初始化区域中添加所有事件:
public WebName()
{
this.event+=TAB Key
}