2011-10-07 58 views
1

我有一個簡單的asp.net頁面按鈕。eventhandler和postback(.net)

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" MasterPageFile="~/MasterPage.master"%> 

<asp:Content runat="server" ID="content" ContentPlaceHolderID="ContentPlaceHolder1"> 

<asp:Button runat="server" ID="btn1" Text="Click me" /> 

</asp:Content> 

與代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     btn1.Click += new EventHandler(Btn1_Click); 
    } 
} 

protected void Btn1_Click(Object sender, EventArgs e) 
{ 
    //do stuff 
} 

當我點擊按鈕的Click事件不會提高,但如果我把事件的按鈕標記,或者如果我綁定回發的事件處理程序。爲什麼?我仍然沒有得到它。該事件是否應該獨立於其來源而提出?

回答

3

我不是100%確定這就是你要求的,但是:如果你每次頁面加載時都沒有連接Event Handler,它將不會運行。如果您認爲AutoEventWireUp應該這樣做,那不是它的目的。爲了澄清,爲AutoEventWireup描述說

「自動綁定只對頁面事件進行,而不是在頁面上的事件 的控制。」

它要麼需要在控制中聲明本身:

<asp:Button runat="server" ID="btn1" Text="Click me" OnClick="Btn1_Click" /> 

,或者您需要刪除Page.IsPostback,並結合每個負載事件處理

protected void Page_Load(object sender, EventArgs e) 
{ 
    btn1.Click += new EventHandler(Btn1_Click); 
} 
+2

是的,我想知道爲什麼AutoEventWireUp沒有幫助。 – AGuyCalledGerald

+0

@ Jan-FrederikCarl Gotcha。我添加了一些澄清和鏈接。它並沒有很清楚地解釋它只適用於Page事件。 –