轉自http://www.cnblogs.com/qiantuwuliang
"
在調試代碼時發現Page_Load事件未執行,找了半天原因,原來是AutoEventWireup設定成false導致。
轉一篇關於AutoEventWireup的文章.
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://msdn.microsoft.com/zh-cn/library/ydy4x04a(VS.80).aspx
ASP.NET 伺服器控制項事件模型
http://msdn.microsoft.com/zh-cn/library/cc437696(VS.71).aspx
"