事件处理程序和回发 (.net)

发布于 2024-12-09 01:49:11 字数 748 浏览 0 评论 0原文

我有一个带有按钮的简单 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 与回发绑定,则会引发 Click 事件。为什么?我还是不明白。该事件是否不应独立于其来源而引发?

I have a simple asp.net-Page with a button.

<%@ 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>

with Code:

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
}

The Click event is not raised when I click the button, but it is if I put the event in markup of button OR if I bind the EventHandler with postbacks. Why? I still don´t get it. Should the event not be raised independently of its source?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鸢与 2024-12-16 01:49:11

我不是 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);
}

I'm not 100% sure this is what you're asking, but: If you're not wiring up the Event Handler every time the page is loaded, it won't run. If you think AutoEventWireUp should be doing it, that's not what it's for. To clarify, the description for AutoEventWireup says

'Automatic binding is performed only for page events, not for events
for controls on the page."

It either needs to be declared on the control itself:

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

Or you need to remove the!Page.IsPostback, and bind the event handler on each load.

protected void Page_Load(object sender, EventArgs e)
{
    btn1.Click += new EventHandler(Btn1_Click);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文