有人可以善解并解释为什么我应该用这种方式写字符串:
public static MvcHtmlString Render(this HtmlHelper htmlHelper, MenuItem menuItem)
{
if (!menuItem.IsVisible)
return MvcHtmlString.Empty;
var li = new TagBuilder("li");
var a = new TagBuilder("a");
a.MergeAttribute("href", menuItem.Uri);
a.SetInnerText(menuItem.Title);
li.InnerHtml = a.ToString();
return MvcHtmlString.Create(li.ToString());
}
当这个更清洁时:
public static MvcHtmlString Render(this HtmlHelper htmlHelper, MenuItem item)
{
if (!item.IsVisible)
return MvcHtmlString.Empty;
var str = string.Format(@"<li><a href=""{0}"">{1}</a></li>", item.Uri, item.Title);
return MvcHtmlString.Create(str.ToString());
}
有什么好处?
答案 0 :(得分:4)
没有很好的理由。我会说速度,因为TagBuilder
基本上是一个专门的StringBuilder
,已知它比string.Format
更快,但我需要看一些基准,因为它看起来像整个HTML结构可能会减慢速度。
您可能想要使用它的一个例子是它使条件逻辑更容易。我想例如像
这样的东西var theClass = item.Title.Length > 5 ? " class=\"Long\"" : "";
var str = string.Format(@"<li><a href=""{0}""{1}>{2}</a></li>", item.Uri, theClass, item.Title);
不是很清楚或干净,而
if (item.Title.Length > 5)
{
a.AddCssClass("Long");
}
// And then all that other stuff.
是一个非常好的解决方案。
答案 1 :(得分:1)
TagBuilder只是确保您的HTML格式正确。我倾向于使用tagbuilder来处理任何我在HTML中使用多行的内容,例如div中的href内的跨度,以便提供额外的拼写错误保护。