单击“动态生成锚点未激发事件”
本文关键字:事件 动态 单击 | 更新日期: 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