4

我正在使用 Visual Studio 2012 专业版。我看不出在页面指令中为 AutoEventWireup 属性设置“true”与“false”有什么区别。它一直表现为“真”,意思是 - 我设置“假”并且没有显式绑定事件,但事件被隐式绑定。如果我遗漏了什么,请告诉我。

4

2 回答 2

9

此设置不是关于触发事件,而是关于将处理程序绑定到标准页面事件。比较这两个说明处理Load事件的片段。

首先,使用AutoEventWireup="true"

public class PageWithAutoEventWireup
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Page_Load is called");
    }
}

其次,与AutoEventWireup="false"

public class PageWithoutAutoEventWireup
{
    override void OnInit(EventArgs e)
    {
        this.Load += Page_Load;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Page_Load is called");
    }
}

Load在这两种情况下,事件都将由页面触发并由您的代码处理。但在第二种情况下,您必须明确注册该事件,而在第一种情况下,ASP.NET 会为您完成一切。

当然,其他页面生命周期事件也是如此,例如Init,PreRender等。

于 2013-02-23T07:11:03.570 回答
4

我知道这是一个旧线程,但我想我会添加以下内容,这最近帮助了我:

除了 Andrei 的回答之外,值得补充的是,通过将 AutoEventWireup 设置为“true”,每次页面加载时都会冒着调用 Page_Load() 两次的风险。这发生在我身上。它在这里得到了充分的解释,我从那里复制了以下内容:

如果性能是关键考虑因素,请不要将 AutoEventWireup 设置为 true。启用自动事件连接后,ASP.NET 必须进行 15 到 30 次尝试将事件与方法匹配。

请注意以下有关将事件处理程序绑定到事件的内容:

  • 如果将 AutoEventWireup 设置为 true,请确保不要手动将页面事件处理程序附加到事件。如果这样做,处理程序可能会被调用不止一次。

  • 自动绑定仅对页面事件执行,而不对页面上的控件事件执行。

  • 作为将事件绑定到处理程序的替代方法,您可以覆盖页面或控件的 Oneeventname 方法。

于 2015-06-09T12:57:34.397 回答