【问题标题】:eventhandler and postback (.net)事件处理程序和回发 (.net)
【发布时间】:2011-10-07 11:08:59
【问题描述】:

我有一个带按钮的简单 asp.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 事件,但是如果我将事件放在按钮的标记中,或者如果我将 EventHandler 与回发绑定在一起。为什么?我还是不明白。事件不应该独立于其来源而引发吗?

【问题讨论】:

    标签: .net event-handling postback


    【解决方案1】:

    我不能 100% 确定这就是您要问的,但是:如果您没有在每次加载页面时都连接事件处理程序,它就不会运行。如果您认为 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);
    }
    

    【讨论】:

    • @Jan-FrederikCarl Gotcha。我添加了一些说明和链接。它并没有很清楚地解释它仅适用于页面事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多