asp.net-mvc - 在 HtmlHelper 扩展方法中构建 html 字符串

标签 asp.net-mvc html-helper

有人可以善待并解释为什么我应该以这种方式编写字符串:

    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());
    }

有什么好处?

最佳答案

没有很好的理由。我会说速度,因为 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.

是一个相当不错的解决方案。

关于asp.net-mvc - 在 HtmlHelper 扩展方法中构建 html 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096613/

相关文章:

c# - 如何使用不同类型的 ASP.NET MVC 访问 View 中的字段

asp.net-mvc - 用于轻量级内容编辑的 MVC 5 自定义 HtmlHelper

c# - Url.Action 返回浏览器中的当前链接

asp.net-mvc-3 - 在 Asp.net MVC 中为 optgroup 功能使用 Helper 代码

c# - 为 MVC3 和 MVC4 Beta 编写自定义 HtmlHelpers,我应该使用 HtmlString 还是 MvcHtmlString?

asp.net-mvc - 我可以通过给它一个类来自定义 @using Html.BeginForm() 吗?

asp.net - System.Web.Http.Authorize 与 System.Web.Mvc.Authorize

c# - MVC API 在正文中发送数据

asp.net - 我迷路了。 ASP.NET MVC 5发生了什么?

asp.net-mvc - MVC 5 OWIN 身份验证(谷歌范围)/没有 EF 的身份