【问题标题】:What is the difference, if any, between string.Format and TagBuilder in ASP.NET MVC?ASP.NET MVC 中的 string.Format 和 TagBuilder 之间有什么区别(如果有)?
【发布时间】:2009-09-28 14:18:24
【问题描述】:

我的 ASP.NET MVC 应用程序有一个 Html Helper 文件。他们中的大多数只是简单地返回一个格式化的字符串。

这是我的格式化字符串助手之一的示例:

public static string Label(this HtmlHelper helper, string @for, string text)
{
    return string.Format("<label for \"{0}\">{1}</label>", @for, text);
}

这是一个 TagBuilder 版本,它给了我与上面相同的结果:

public static string Label(this HtmlHelper helper, string @for, string text)
{
    var builder = new TagBuilder("label");
    builder.Attributes.Add("for", @for);
    builder.SetInnerText(text);
    return builder.ToString(TagRenderMode.Normal);
}

现在,我一直在阅读/学习一些关于 MVC 的混合实现的网站。有些使用TagBuilder 方法,有些使用string.Format(),有些可以互换使用。

标签标签相当简单,那么只返回一个格式化的字符串而不是为像这样的标签实例化TagBuilder 类会“更好”吗?

我不一定担心性能,我只是好奇为什么有些人选择 TagBuilder 而有些人使用格式化字符串。

感谢赐教!

【问题讨论】:

    标签: c# asp.net-mvc html-helper tagbuilder


    【解决方案1】:

    使用 TagBuilder 将允许您合并标签上的属性。例如,使用 String.Format,如果您想有条件地在标签上使用 CSS Class 属性,您需要执行以下操作:

    String.Format("<label {0}>Text</label>", (includeClass ? "class=\"Something\"" : ""));
    

    而使用 TagBuilder,您可以使用 MergeAttributes() 传入键/值字典。打开 Reflector(或获取源代码)并查看 System.Web.Mvc.Html.InputHelper() 以了解使用具有大量条件属性的构建器的强大功能。

    两者都可以产生相同的输出,但这实际上取决于您要实现的目标。这还取决于您认为哪个代码更“干净”。

    【讨论】:

    • 非常好的观点。我想我可能会“混合”我的帮助文件,将简单的文件设为格式化字符串,将更复杂的文件设为 TagBuilders。
    • ... 以及 AddCssClass 用于分配多个 CSS 类。
    【解决方案2】:

    Tagbuilder 是一个便利类。它存储标签属性的字典,然后一次性输出所有 HTML。您也不必处理附加尖括号。它本质上与您的代码执行相同的操作,如果您只有 一个属性,您的方式可能同样方便。

    标签生成器由 HTML 助手在内部使用。

    【讨论】:

      【解决方案3】:

      TagBuilder 处理属性值的 HTML 编码:SetInnerText() 编码,.InnerHTML 不编码。此外,如果您返回一个 TagBuilder 而不是一个字符串,您可以在稍后的流程中轻松添加 CSS 类或属性。

      Why use TagBuilder instead of StringBuilder?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 2011-05-06
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多