6

如果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事件。

我的问题是:在设置为的情况下,我怎样才能将Page_PreInit事件连接起来?AutoEventWireupfalse

我了解MSDN 页面上列出了替代方案,例如使用页面的构造函数。我想具体了解如何按照他们的建议进行操作OnInit

4

2 回答 2

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);
}
于 2012-08-07T08:17:20.137 回答
0

在初始化区域添加所有事件:

public WebName()
      {
         this.event+=TAB Key
      }
于 2016-02-06T11:45:28.340 回答