2009-09-28 90 views
4

我有一个用于我的ASP.NET MVC应用程序的Html Helper文件。他们大多数人只是返回一个格式化的字符串。ASP.NET MVC中的string.Format和TagBuilder之间有什么区别?

这里是我的格式化字符串的一个助手的例子:

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和其他人使用格式化的字符串。

感谢您的启示!

回答

6

使用TagBuilder将允许您合并标签上的属性。例如,使用的String.Format,如果你要有条件地对标签的CSS类的属性,你需要做的是这样:

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

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

两者都可以产生相同的输出,但这取决于您想要达到的目标。这也取决于你认为哪些是“更清洁”的代码。

+0

非常好的一点。我想我可以'混合'我的帮手文件,使简单的一个格式化字符串和更复杂的TagBuilders。 – Anders 2009-09-28 15:35:57

+0

...还有'AddCssClass'用于定义多个CSS类。 – 2012-02-02 06:46:03

2

Tagbuilder是一个便利的类。它存储标签属性的字典,然后一次输出HTML。您也不必处理附加尖括号。它基本上和你的代码做同样的事情,如果你只有一个属性,你的方式可能会很方便。

Tagbuilder由HTML Helpers在内部使用。

+0

好吧谢谢! – Anders 2009-09-28 15:34:53

相关问题