【问题标题】:AutoEventWireup True Vs FalseAutoEventWireup 真与假
【发布时间】:2013-02-23 05:37:39
【问题描述】:

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

【问题讨论】:

    标签: asp.net visual-studio-2012


    【解决方案1】:

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

    首先,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 等。

    【讨论】:

    • 即使我们设置 AutoEventWireup = "false",事件也会被隐式绑定。含义 - 在第二个 sn-p 中没有以下代码的情况下隐式注册了事件。覆盖 void OnInit(EventArgs e) { this.Load += Page_Load; }
    • 很抱歉给您带来了困惑。我误读了你的答案。您的意思是说 AutoEventWireup 仅适用于页面事件,它不会影响其他事件,例如控件的单击事件和控件的更改事件。含义 - 除了页面事件之外,无论 AutoEventWireup 值如何,都将被隐式绑定。我可能对吗?
    【解决方案2】:

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

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

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

    关于将事件处理程序绑定到事件,请注意以下几点:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2017-02-20
      • 1970-01-01
      • 2010-11-12
      • 2012-06-06
      相关资源
      最近更新 更多