我使用的是Visual Studio 2012专业版。我认为在page指令中为AutoEventWireup属性设置“true”与“false”没有任何区别。它一直表现为“true”,意思是 - 我设置“false”而不是显式绑定事件,但事件是隐式绑定的。如果我遗失任何东西,请告诉我。
答案 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会为您完成所有事情。
当然,其他页面生命周期事件也是如此,例如Init
,PreRender
等。
答案 1 :(得分:3)
我知道这是一个老线程,但我想我会添加以下内容,最近帮助了我:
除了Andrei的回答之外,值得补充的是,通过将AutoEventWireup设置为“true”,每次加载页面时都会冒着两次调用Page_Load()的风险。这发生在我身上。它完全解释了here,我复制了以下内容:
如果性能是关键,请不要将AutoEventWireup设置为true 考虑。启用自动事件连接时,ASP.NET必须 在15到30次之间尝试将事件与方法匹配。
请注意以下有关将事件处理程序绑定到事件的信息:
如果将AutoEventWireup设置为true,请确保不要将其设置为true 手动将页面事件处理程序附加到事件。如果你这样做,处理程序 可能不止一次被召唤。
仅对页面事件执行自动绑定,而不是对事件执行 对于页面上的控件。
作为将事件绑定到处理程序的替代方法,您可以覆盖 页面或控件的Oneventname方法。