2013-02-23 90 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方法 。