我在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,因为在这种情况下我将不得不使用隐藏字段来获取新值
答案 0 :(得分:1)
以这种方式向标签添加标记/文本不会添加链接按钮或将事件注册到服务器上的控制树。对于动态添加控件以及要实现的服务器事件的行为,您需要注册控件和事件(如下所示)
<强> 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
}
答案 1 :(得分:0)
我不这么认为它是动态创建的。该控件的ID在哪里。您必须创建服务器端控件并将其添加到某个占位符/面板e.t.c
中答案 2 :(得分:0)
默认情况下,控件使用__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
}
}
我希望它会对你有所帮助。