如果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)
,但没有效果。
此处显示的图形表明,OnInit
方法实际上出现在PreInit
事件之后。 考虑到这一点,我尝试覆盖OnPreInit
并做同样的事情---没有效果。
MSDN 文章在这里明确指出,如果AutoEventWireup
设置为 false
,事件可以在覆盖OnInit
中连接。他们使用的示例是 Page_Load
,当然这就像对我一样工作,但他们没有解决这似乎不适用于Page_PreInit
事件。
我的问题是:在AutoEventWireup
设置为false
的情况下,如何连接Page_PreInit
事件?
我知道 MSDN 页面上列出了其他方法,例如使用页面的构造函数。 我想具体知道如何按照他们的建议做 OnInit
.
OnPreInit() 方法的基本实现负责引发PreInit
事件。由于您的重写在注册PreInit
处理程序之前调用该实现,因此确实不会调用它。
尝试在注册处理程序后调用基类的方法:
protected override void OnPreInit(EventArgs e)
{
PreInit += new EventHandler(Page_PreInit);
Load += new EventHandler(Page_Load);
// And only then:
base.OnPreInit(e);
}
初始化区域添加所有事件:
public WebName()
{
this.event+=TAB Key
}