Dav*_*Dev 40 c# asp.net-mvc stringbuilder extension-methods tagbuilder
使用标记生成器和字符串生成器在htmlhelper类中创建表或使用HtmlTable有什么区别?
他们不是生成同样的事情吗?
Bas*_*dov 63
TagBuilder是专门为创建HTML标记及其内容而设计的类.你是对的,结果将是一个字符串,当然你仍然可以使用StringBuilder,结果将是相同的,但你可以做更容易的事情TagBuilder.让我们说你需要生成一个标签:
<a href='http://www.stackoverflow.com' class='coolLink'/>
Run Code Online (Sandbox Code Playgroud)
使用StringBuilder你需要写这样的东西:
var sb = new StringBuilder();
sb.Append("<a href='");
sb.Append(link);
sb.Append("' class = '");
sb.Append(ccsClass);
sb.Append("'/>");
sb.ToString();
Run Code Online (Sandbox Code Playgroud)
它不是很酷,不是吗?并比较如何使用它来构建它TagBuilder;
var tb = new TagBuilder("a");
tb.MergeAttribute("href",link);
tb.AddCssClass(cssClass);
tb.ToString(TagRenderMode.SelfClosing);
Run Code Online (Sandbox Code Playgroud)
那不是更好吗?
Rya*_*yan 12
到目前为止,其他答案已经错过了一点.如果TagBuilder从扩展方法返回,则可以继续在视图中添加属性.假设您从Html帮助器返回一个表,并且您想要添加一个类属性.如果您正在使用a StringBuilder,则需要将该类作为参数传递.
public static string Table(...., string @class)
{
...
sb.AppendFormat("class='{0}", @class);
...
}
// In the view
<%: Html.Table(someParams, "fancy") %>
Run Code Online (Sandbox Code Playgroud)
但是,为HTML标记添加类属性不是创建表的扩展方法的关注点!如果我们切换到用于生成HTML的语义模型(TagBuilder),我们可以在table方法之外添加class属性.
public static TagBuilder Table(....)
{
...
return tag;
}
// In the view
<%: Html.Table(someParams).AddCssClass("fancy") %>
Run Code Online (Sandbox Code Playgroud)
除了TagBuilder之外,您可能还想查看FubuMVC的HtmlTags库.这是一个更好的生成HTML的模型.我在博客上有更多细节.
他们不是生成同样的事情吗?
嗯,当然,但这应该不是一种威慑力,不是吗?一个类是针对比另一个更具体的东西而设计的,因此它提供了更大的便利性.
我可以问:为什么要使用StringBuilder?为什么不List<char>呢?我不能从两者中产生同样的东西吗?
更进一步:为什么连一个List<char>?为什么不只是一个char[],我可以控制自己的调整大小/操纵?我仍然可以完全创建string一个char[].
事实上,我真正需要的是一个char*和一个int(长度).对?
我的观点是,如果一个类可用于您可以使用的专用功能,那么在您问我时使用它是有意义的.
| 归档时间: |
|
| 查看次数: |
21460 次 |
| 最近记录: |