AutoEventWireup
asp.net(AutoEventWireup屬性的確切含義)
首先,從瀏覽器頁面觸發的事件不能立刻在本地得到處理,而是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