Cpt*_*rkt 6 c# asp.net events page-lifecycle event-handling
如果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>");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致"Page_Load事件被触发!" 被展示,但没有Page_PreInit.我base.OnInit(e)在连线之前和之后尝试过,这没有任何效果.
此处显示的图表表明该OnInit方法实际上是在PreInit事件发生之后.考虑到这一点,我尝试重写OnPreInit并做同样的事情 - 没有效果.
这里的MSDN文章明确指出,如果AutoEventWireup设置为false,事件可以在覆盖中连接OnInit.他们使用的例子Page_Load当然就像它对我的作用一样,但他们没有说明这似乎不适用于该Page_PreInit事件.
我的问题是:Page_PreInit在AutoEventWireup设置为的情况下如何才能将事件连接起来false?
我知道MSDN页面上列出了其他替代方法,例如使用页面的构造函数.我想具体知道他们建议怎么做OnInit.
Fré*_*idi 10
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22787 次 |
| 最近记录: |