单击动态生成锚点未触发的事件

时间:2013-09-03 06:41:20

标签: c# asp.net

我在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,因为在这种情况下我将不得不使用隐藏字段来获取新值

3 个答案:

答案 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
    }
}

我希望它会对你有所帮助。