2011-10-07 56 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事件。 –