AutoEventWireup True Vs False



我使用的是Visual Studio 2012专业版。在page指令中,我没有看到为AutoEventWireup属性设置"true"one_answers"false"有任何区别。一直以来,它的行为都是"true",这意味着我设置了"false",并且没有显式绑定事件,但事件是隐式绑定的。如果我遗漏了什么,请告诉我。

此设置不是要触发事件,而是要将处理程序绑定到标准页面事件。比较说明处理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等。

我知道这是一个旧线程,但我想我应该添加以下内容,这最近对我有所帮助:

除了Andrei的答案之外,还值得补充的是,通过将AutoEventWireup设置为"true",您将面临每次加载页面时调用Page_Load()两次的风险。这件事发生在我身上。这里有充分的解释,我从那里复制了以下内容:

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

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

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

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

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

最新更新