AutoEventWireup=“true” 屬性


 

AutoEventWireup

AutoEventWireup=“true”  :自動事件匹配

asp.net(AutoEventWireup屬性的確切含義)

使用Asp.NET時,新建的aspx頁面第一行page指令中包含了一個AutoEventWireup屬性。網上的很多教程認爲這一屬性,甚至這一行代碼都是沒用的。其實,這是不瞭解Asp.NET事件處理模型的表現。簡單來說,這一屬性決定了當前頁是否自動關聯某些特殊事件。

     首先,從瀏覽器頁面觸發的事件不能立刻在本地得到處理,而是POST至服務器上,因此,Asp.NET建立了委託(代理)機制。在建立一個事件的同時,建立相應的委託:

private void InitializeComponent()
   {    
    this.mybutton.Click += new System.EventHandler(this.Button1_Click);//委託
   }

private void Button1_Click(object sender, System.EventArgs e)
   {
    //事件內容
   }

     委託將事件與該頁面顯式關聯。在AutoEventWireup="false"時,如果沒有委託,事件將不執行。

     這與早期VB採用的隱式事件掛起截然不同,各有利弊。但,Asp.NET中可以修改AutoEventWireup="true",使頁面與某些特殊的事件方法綁定,自動識別這些具有特定名稱的事件,而不需要進行委託。這些特定名稱包括:Page_Init, Page_Load, Page_DataBind, Page_PreRender和Page_Unload等。比如:

private void Page_Load(object sender, System.EventArgs e)
   {
    // 事件內容
   }

     針對這些事件方法,開發人員可以利用該參數避免編寫過多的鏈接代碼。如果該屬性設置爲"false",則代碼應改爲:

private void InitializeComponent()
   {    
    this.mybutton.Click += new System.EventHandler(this.Button1_Click);//委託
    this.Load += new System.EventHandler(this.Page_Load);//可以用AutoEventWireup屬性避免的委託
   }

private void Page_Load(object sender, System.EventArgs e)
   {
    // 事件內容
   }

private void Button1_Click(object sender, System.EventArgs e)
   {
    //事件內容
   }

     一定不可以在沒有委託的情況下使用Page_Load類似的方法!

     大部分情況下,頁面不需要關聯如此多的特殊事件,會增加額外的操作和系統開銷。同時, ASP.NET 頁框架自動調用事件處理的方法基於其預定名稱,這會導致到相同事件處理方法當頁運行被調用兩次,也會增大系統開銷。因此,Microsoft 建議始終將 AutoEventWireup 設置爲 FALSE。

@ Page指令的說明:
http://msdn2.microsoft.com/en-us/library/ydy4x04a(vs.71).aspx
ASP.NET 服務器控件事件模型
http://msdn2.microsoft.com/en-us/library/59t350k3(vs.71).aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章