2012-11-08 57 views
3

我來自ASP背景和學習ASP.NET。我想知道AutoEventWireup屬性是否也可以連接Control事件(如Button_Click)或只是Page事件? 我,這樣,如果你將其設置爲TRUE &還提供明確的事件處理程序在其他地方看,它會被執行兩次,你能解釋爲什麼發生這種情況(因爲只是1處理器VS必須承認其已執行)? 你可以給用例設置爲False嗎?ASP.net AutoEventWireup屬性是做什麼的?

將不勝感激代碼示例

回答

3

一般將它設置爲true,這意味着你不需要wireup每個甚至明確。如果要爲多個控件/事件使用相同的事件處理程序,則將其設置爲false。在這種情況下,您可以明確地將多個事件連接到單個事件處理程序。它控制着所有事件。當你將屬性設置爲true並且明確地連接事件時,.Net將兩次觸發事件,因爲委託將被註冊兩次。

1

Page元素通過尋找匹配預期簽名和命名約定(即Page_<event>)的方法工作。如果找到,頁面框架會在正常提起事件之前直接調用事件處理程序。這就是爲什麼,如果你在代碼中註冊事件處理程序,它們會被有效地調用兩次。

這是來自事件處理程序如何正常工作有很大不同。如果您編寫了兩次註冊具有相同事件的處理程序的代碼,則每個事件只會調用一次該代碼。這是因爲事件處理程序本質上是一組委託,並試圖將委託添加到相同的方法是無操作。

AutoEventWireup行爲僅適用於網頁引發的事件。你不會得到它的其他控件,所以他們應手動有線了,通常在Page_InitPage_Load事件。

如果您不使用AutoEventWireup(即將其設置爲「false」),則必須自己連接頁面事件處理程序以調用它們。這是Visual Studio設計器所做的,因爲它爲您生成事件註冊碼。

+0

謝謝回答我的大部分的查詢。如果我將「AutoEventWireup」保留爲false並忘記使用代理註冊它,是否會執行事件處理程序 –

+0

我已將該信息附加到我的答案中。 –

+0

不要執行至少一次?由於它在我們啓用'AutoEventWireup'時執行了兩次,(一旦bcos簽名匹配第二個爲正常程序)是否遺漏了任何東西。調用兩次 –

相關問題