单击“动态生成锚点未激发事件”

本文关键字:事件 动态 单击 | 更新日期: 2023-09-27 18:29:55

我在Lable Text上有一个锚。我正在用runat="server"动态创建锚,点击一个按钮,它就会按预期创建。我想使用它的点击事件,但它没有启动。

我的代码:

lblEmail.Text = email + " <a href='#' runat='server' class='crossicon' onclick='removebtn_Click'></a> ";
protected void removebtn_Click(object sender, EventArgs e)
{
}

如何为该按钮创建事件?我不想使用JS,因为在这种情况下,我将不得不为新值

单击“动态生成锚点未激发事件”

使用隐藏字段

以这种方式向标签添加标记/文本不会添加链接按钮或将事件注册到服务器的控制树中。对于要实现的动态添加控件和服务器事件的行为,您需要注册控件和事件(如下所示)

aspx:

<asp:Panel runat="server" id="pnlEmail">
     <asp:Label runat="server" id="lblEmail"/>
</asp:Panel>

aspx.cs:在任何情况下,您都希望设置标签文本(以及链接)

lblEmail.Text = email;
LinkButton lnkbtnEmail = new LinkButton();
lnkbtn.Click += lnkbtn_Click;
lnkbtn.Text = "Dynamic Link";
pnlEmail.Controls.Add(lnkbtnEmail);

处理程序将是

void lnkbtn_Click(object sender, EventArgs e)
{
      // code for your dynamically generated link
}

默认情况下,控件使用__doPostBack回发到服务器__doPostBack获取控件的UniqueID(或者在HTML中,HTML元素的name属性)。第二个参数是要激发的命令的名称。

<a href='#' runat='server' class='crossicon' href="javascript:void(0);" onclick="__doPostBack('someuniqueid', '');></a> 

默认情况下,System.Web.UI.Page已经实现了IPostBackEventHandler接口,所以不需要在每个页面上都实现它——它已经存在了。

您可以在页面上覆盖RaisePostBackEvent方法,如下所示:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument);
    if (source == SomeControl)
    {
        //do something
    }
}

我希望它能帮助你。

我不认为它是动态创建的。该控件的ID在哪里。您必须创建服务器端控件,并将其添加到一些占位符/面板e.t.c