0

我在标签文本上有一个锚点。我在单击按钮时动态创建带有 runat="server" 的锚点,它按预期创建。我想使用它的点击事件,但它不会触发。

我的代码:

lblEmail.Text = email + " <a href='#' runat='server' class='crossicon' onclick='removebtn_Click'></a> ";

protected void removebtn_Click(object sender, EventArgs e)
{
}

如何为此按钮创建事件?我不想使用 JS,因为在这种情况下,我将不得不使用隐藏字段来获取新值

4

3 回答 3

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
}
于 2013-09-03T07:00:08.097 回答
0

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

于 2013-09-03T07:02:09.830 回答
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
    }
}

我希望它会帮助你。

于 2013-09-03T07:03:09.640 回答