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



如果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
      }

相关内容

  • 没有找到相关文章

最新更新