AutoEventWireup True Vs False

时间:2013-02-23 05:37:40

标签: asp.net visual-studio-2012

我使用的是Visual Studio 2012专业版。我认为在page指令中为AutoEventWireup属性设置“true”与“false”没有任何区别。它一直表现为“true”,意思是 - 我设置“false”而不是显式绑定事件,但事件是隐式绑定的。如果我遗失任何东西,请告诉我。

2 个答案:

答案 0 :(得分:8)

此设置不是关于触发事件,而是关于将处理程序绑定到标准页面事件。比较这两个说明处理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会为您完成所有事情。

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

答案 1 :(得分:3)

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

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

  

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

     

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

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

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

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

  •