Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 手动连接Page_PreInit事件,并将AutoEventWireup设置为false_C#_Asp.net_Events_Event Handling_Page Lifecycle - Fatal编程技术网

C# 手动连接Page_PreInit事件,并将AutoEventWireup设置为false

C# 手动连接Page_PreInit事件,并将AutoEventWireup设置为false,c#,asp.net,events,event-handling,page-lifecycle,C#,Asp.net,Events,Event Handling,Page Lifecycle,如果AutoEventWireup属性设置为false,则需要手动连接事件。然而,我似乎无法启动页面\u PreInit。我想我可能会让连线发生得太晚(一旦我们已经过了Page\u PreInit),但我不确定还能把连线放在哪里 例如 protected override void OnInit(EventArgs e) { base.OnInit(e) PreInit += new EventHandler(Page_PreInit); Load += new Even

如果
AutoEventWireup
属性设置为
false
,则需要手动连接事件。然而,我似乎无法启动
页面\u PreInit
。我想我可能会让连线发生得太晚(一旦我们已经过了
Page\u 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>");
}
protected override void OnInit(事件参数e)
{
碱基奥尼特(e)
PreInit+=新事件处理程序(第_页PreInit);
Load+=新的事件处理程序(页面加载);
}
受保护的无效页\u PreInit(对象发送方,事件参数e)
{
Response.Write(“Page_PreInit event fired!
”;//这永远不会到达 } 受保护的无效页面加载(对象发送方、事件参数e) { 响应。写入(“触发页面加载事件!
”; }
上面的代码导致显示“Page_Load event Fireed!”,但在
Page_PreInit
中没有显示任何内容。在连线之前和之后,我都尝试了
base.OnInit(e)
,但都没有效果

图中显示的是
OnInit
方法实际上在
PreInit
事件之后。考虑到这一点,我尝试重写
OnPreInit
并做同样的事情——没有效果

MSDN文章明确指出,如果将
AutoEventWireup
设置为
false
,则可以在覆盖的
OnInit
中连接事件。他们使用的例子是
Page\u Load
,当然这和我的情况一样,但他们没有说明这似乎对
Page\u PreInit
事件不起作用

我的问题是:如果
AutoEventWireup
设置为
false
,如何连接
Page\u PreInit
事件?


我知道有如上所列的备选方案,例如使用页面的构造函数。我想知道如何具体执行他们建议的
OnInit

方法的基本实现负责引发
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
      }

您必须在构造函数中或在调用
base.OnInit
之前执行此操作。不幸的是,将行置于base.OnInit(e)之上没有效果,并且针对较早的事件(例如OnPreInit)仍然无法到达页面\u PreInit事件。应该注意,此代码覆盖的是
OnPreInit
而不是
OnInit