【问题标题】:Building HtmlStrings in ASP.NET MVC在 ASP.NET MVC 中构建 HtmlStrings
【发布时间】:2011-10-26 12:40:41
【问题描述】:

我有一个需要返回 HtmlString 的扩展方法。该方法有一个将构建 HtmlString 的循环,但是 HtmlString 对象没有 Append 方法并且不允许使用 + 运算符进行连接,所以我不确定如何构建 HtmlString。

我想使用 StringBuilder 但它没有 ToHtmlString 方法...

对此有任何解决方案或模式吗?

【问题讨论】:

  • 我认为您应该能够使用 HTML 内容构建一个普通的字符串生成器,然后将其输出到 @Html.Raw() 调用中,这样可以解决问题吗?
  • 谢谢 - 效果很好。将为该解决方案起草一个包含代码的答案。
  • 没问题,很高兴它有帮助,如果有帮手,就没有必要重新发明轮子! :)
  • 我更喜欢@swapneel 的答案,因为它为将 RouteValueDictionary 参数添加到您的扩展方法并以 MVC'y 方式呈现相关标记敞开大门。无论您是渲染单个标签还是整个 HTML 块,这都适用。
  • 我不确定我是否正确,所以我不会将其作为答案发布,但是使用您的 StringBuilder 但将扩展方法添加到 StringBuilder ToHtmlString 怎么样?

标签: asp.net-mvc mvchtmlstring


【解决方案1】:

为什么不直接在 stringbuilder 中构建字符串,然后 return MvcHtmlString.Create(sb.ToString());

【讨论】:

    【解决方案2】:

    我想你想使用TagBuilder 并查看Using the TagBuilder Class to Build HTML Helpers

    如下图..

       // Create tag builder
                var builder = new TagBuilder("img");
    
                // Create valid id
                builder.GenerateId(id);
    
                // Add attributes
                builder.MergeAttribute("src", url);
                builder.MergeAttribute("alt", alternateText);
                builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
    
                // Render tag
                return builder.ToString(TagRenderMode.SelfClosing);
    

    【讨论】:

      【解决方案3】:

      您可以查看 fubu spin-off 创建 HTML 标签。 Here is a SO question 稍微介绍一下它的用法。

      【讨论】:

        【解决方案4】:

        您可以自己编写ToHtmlString() 方法作为StringBuilder 上的扩展方法。

        【讨论】:

          【解决方案5】:

          对此的几种解决方案,包括使用 TagBuilder 但使用 Html.Raw() 对我来说效果很好:

           public static IHtmlString HtmlMethod(this HtmlHelper htmlhelper, Object object)
                  {
           var sb = new StringBuilder();
          foreach (var item in object)
          {
          sb.Append(object.outputStr)
          }
          
          return htmlHelper.Raw(sb.ToString());
          }
          

          【讨论】:

            猜你喜欢
            • 2012-06-01
            • 2010-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-10-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多