2008-10-23 31 views
2

我正在使用C#。默認情況下,當我在Visual Studio 2008中添加或不添加母版頁時,AutoEventWireup屬性在頁面指令中設置爲true。這個屬性在master page master指令中也被設置爲true。在ASP.Net的頁面指令中應該將AutoEventWireup設置爲什麼值?

我應該將AutoEventWireup設置爲(true/false)的值是什麼?

這兩個值的優缺點是什麼?

任何幫助,非常感謝。

謝謝。

回答

3

這是一種根據Microsoft安裝的命名約定自動將事件處理程序連接到事件的方法。

如果我沒有記錯的話,這種方式的實現方式是反射。在運行時,ASP.NET將檢查你的類,尋找符合預期命名約定的簽名的方法,然後將它們作爲處理程序發送給它們各自的事件。

這就是說,專業人士認爲這是一種標準方法,並可節省您自己接線事件處理程序的麻煩。一個被認爲的「con」會是它需要一個額外的步驟(反思),比你自己做的花費更多。

大多數情況下,反映「成本」是如此之少以至於它實際上並不值得一提,但重要的是要了解封面下發生的情況。

0

如果它設置爲false,那麼如果您有像Page_Load或Page_PreInit這樣的方法,它們將不會觸發。 AutoEventWireup意味着如果有類似這樣的事件發生,他們應該將事件處理程序連接到這些事件。

1

這隻會導致運行時自動將傳統頁面生命週期方法(如Page_Load)連接到它們等效的事件處理程序(Page.Load)。如果您設置AutoEventWireup爲false,那麼你就需要這樣的:

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
} 

的,而不是MS約定:

protected void Page_Load(object sender, EventArgs e) 
{ 
} 

您也不必擔心通話base.OnLoad,因爲wireup自動做到這一點。但是,將它設置爲false可能會帶來小的性能優勢 - 但我從未驗證過這一點。

-Nate戴維斯

+0

這主要是不正確 - 你看第一個方法是不是一個事件處理程序,而是一個覆蓋。有一個巨大的差異,我建議你閱讀這個主題。你必須手動連接東西的方式是在代碼中,通常在構造函數中,像這樣: – 2008-10-24 16:03:54

相關問題