2013-02-23 105 views
4

我正在使用Visual Studio 2012专业版。我没有看到在页面指令中为AutoEventWireup属性设置“true”与“false”之间的差异。它始终表现为“真实”,意义 - 我设置“false”并且不显式绑定事件,但事件隐含地绑定。请让我知道我是否缺少任何东西。AutoEventWireup True Vs False

回答

7

这个设置不是关于触发事件,而是关于绑定处理程序到标准页面事件。比较说明处理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 
{ 
    overrie 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

+0

即使我们设置AutoEventWireup =“false”,事件也会隐式绑定。含义 - 事件在第二个片段中隐含地没有以下代码注册。 override void OnInit(EventArgs e) { this.Load + = Page_Load; } – afin 2013-02-23 07:54:36

+1

@afin,听起来很奇怪。你能否显示你的代码? – Andrei 2013-02-23 08:10:30

+0

对不起,我感到困惑。我误解了你的答案。您的意思是说AutoEventWireup仅适用于页面事件,它不会影响其他事件,如控件的“单击事件和控件”更改事件。含义 - 除页面事件外,将隐式绑定,与AutoEventWireup值无关。我可能对吗? – afin 2013-02-23 13:37:52

3

我知道这是一个古老的线程,但想我会添加以下,最近帮我:

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

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

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

  • 如果您设置AutoEventWireup为true,请确保你不也 手动附加页事件处理程序的事件。如果这样做,处理程序 可能会被调用多次。

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

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