【问题标题】:Add asp.net LinkButton to a Literal using c#使用 c# 将 asp.net LinkBut​​ton 添加到文字
【发布时间】:2016-10-24 09:57:11
【问题描述】:

我想将一些 asp.net 链接按钮控件添加到 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
}

我尝试了这些,并将链接按钮成功添加到文字中。但是链接按钮没有转换为&lt;a&gt; 标签,我发现有了这样的萤火虫,没有任何事件不能触发:

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

【问题讨论】:

  • 不能将服务器端控件添加为文字控件的文本或子控件。您添加到 Literal 控件的任何内容都被视为文字字符串,这就是它被称为 Literal 的原因。你需要找到替代方法来做任何你想做的事情

标签: c# asp.net tree literals asplinkbutton


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    正如 Andrei 所建议的那样,以这种方式使用链接按钮是行不通的。

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

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

    【讨论】:

      【解决方案3】:

      我认为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();
      }
      

      【讨论】:

        【解决方案4】:

        如果您有单个&lt;asp:LinkButton ..&gt;,那么您可以在运行时设置它的属性。
        喜欢

        BtnAdd.Id="";
        

        或者如果你有多个,那么你可以使用AddControl下面的方法链接

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

        【讨论】:

          【解决方案5】:

          如果你只需要使用一次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 
          

          【讨论】:

            猜你喜欢
            • 2011-09-10
            • 2018-10-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-26
            相关资源
            最近更新 更多