手动连接Page_PreInit事件,AutoEventWireup设置为false

时间:2012-08-07 07:54:44

标签: c# asp.net events event-handling page-lifecycle

如果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建议。

2 个答案:

答案 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
      }