使用 C# 将 asp.net LinkBut​​ton 添加到文字

Add asp.net LinkButton to a Literal using c#

我想将一些 asp.net linkbutton 控件添加到 c# web 表单应用程序的文字中,如下代码所示:

StringBuilder sb = new StringBuilder("<ul>");
sb.Append("<li>");
sb.AppendFormat("<asp:LinkButton runat='server' class='add-row' ID='BtnAdd' OnClick='BtnAdd_Click' CommandArgument='test'>{0}</asp:LinkButton>", "Text on the link");
sb.Append("</li></ul>");
this.Literal.Text = sb.ToString();`

我还想触发点击事件并获取 CommandArgument 的值。

private void BtnAdd_Click(object sender, EventArgs e)
{
   //get the value of CommandArgument
}

我尝试了这些并且成功地将链接按钮添加到文字中。但是 linkbutton 没有转换为 <a> 标签,我发现使用 firebug 是这样的,没有任何事件不能触发:

我想用 <ul><li> 标签制作一棵树,叶子作为链接按钮。 如果有人能解释这个问题的解决方案,那将非常有帮助。

按照 Andrei 的建议,以这种方式使用链接按钮是行不通的。

我过去使用过类似的解决方案,为文字中的每个 a 标记创建一个查询参数,然后重定向到当前页面或其他页面,然后从那里提取查询参数。

不过,我建议您首先尝试看看是否有其他方法可以完成您正在尝试做的事情,因为文字解决方案最终非常混乱且代码繁重。

我认为 Repeater 更适合您的目的。

<ul>
    <asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
            <li><asp:LinkButton ID="BtnAdd" runat="server" CssClass="add-row" OnClick="BtnAdd_Click">Text on the link</asp:LinkButton></li>
        </ItemTemplate>
    </asp:Repeater>
</ul>

如果您想使用 CommandArgument,您需要 OnCommand,而不是 OnClick

<asp:LinkButton ID="BtnAdd" runat="server" CssClass="add-row" OnCommand="BtnAdd_Command" CommandArgument='<%# Eval("value") %>'>

protected void BtnAdd_Command(object sender, CommandEventArgs e)
{
     string commandArgument = e.CommandArgument.ToString();
}

如果你有单人 <asp:LinkButton ..> 那么你可以在 运行 时将其设置为 属性。
喜欢

BtnAdd.Id="";

或者如果你是多个那么你可以使用下面的 AddControl 方法是 link

How to add controls dynamically when click button in asp.net?
How to add controls dynamically to ASP.NET form?

此处正确的方法是通过 WebControl api 而不是模板。 您的方法可能仅适用于 HTML 内容。 您需要做的是处理像 OnInit 这样的页面生命周期事件,获取对您的容器控件 (this.MyPanel) 的引用,并动态地将项目添加到该控件的子控件 属性 (this.MyPanel.Children .添加(新....))

建议的 Repeater 解决方案不适用于树结构数据源,但适用于列表...

如果你必须使用 asp: LinkBut​​ton 一次,那么用这种方法。

<asp:Literal runat="server" ID="DocLink"></asp:Literal>

<asp:LinkButton runat="server" ID="LinkButton1" OnCommand='LinkButton1_Click'></asp:LinkButton>

并在 .cs 文件中

LinkButton1.Text = CurrentListItemAbsoluteUrl;

LinkButton1.CommandArgument = CurrentListItemAbsoluteUrl;

public void LinkButton1_Click(Object sender, CommandEventArgs e)
{
    e. CommandEventArgs //To get your parameter