【问题标题】:Building Html in Html Helper using Razor or Tag builder?使用 Razor 或标签生成器在 Html Helper 中构建 Html?
【发布时间】:2013-08-13 16:26:03
【问题描述】:

我正在 MVC 4 中构建一个 Html 助手,我想知道如何在 html 助手中正确构建标签/html。

例如,这里是一个简单的 html 帮助程序,它使用 TagBuilder 类创建图像标签:

public static MvcHtmlString Image(this HtmlHelper html, string imagePath, 
    string title = null, string alt = null)
{
    var img = new TagBuilder("img");
    img.MergeAttribute("src", imagePath);
    if (title != null) img.MergeAttribute("title", title);
    if (alt != null) img.MergeAttribute("alt", alt);

    return MvcHtmlString.Create(img.ToString(TagRenderMode.SelfClosing));
}

从另一方面来说,我可以这样做:

// C#:
public static MvcHtmlString Image(this HtmlHelper html, string imagePath, 
    string title = null, string alt = null)
{
    var model = new SomeModel() {
        Path = imagePath,
        Title = title,
        Alt = alt
    };

    return MvcHtmlString.Create(Razor.Parse("sometemplate.cshtml", model));
}

// cshtml:
<img src="@model.Path" title="@model.Title" alt="@model.Alt" />

哪个是更好的解决方案?

【问题讨论】:

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


    【解决方案1】:

    两者都是有效的,但我怀疑后者要慢得多,我正在尝试看看它比使用局部视图有什么好处。

    我的经验法则是 HtmlHelpers 应该只用于简单的标记;任何更复杂的事情都应该使用部分视图和子操作。

    【讨论】:

    • 我问这个问题是因为我有一个非常复杂的帮助器来构建一个表。为了构建表格,我使用了大量的标签,所以我想知道它是否会更慢或更慢,因为它对我很有帮助。
    • 我会把它放在问题中,因为为表格构建 HTML 比您给定的示例更复杂。对于构建表,您应该查看 MvcContrib 的 Grid helper - mvccontrib.codeplex.com/wikipage?title=Grid 或 System.Web.Helpers 中的 WebGrid - msdn.microsoft.com/en-us/magazine/hh288075.aspx。我不会重新发明轮子:)
    • 我也这么认为,但这不是我需要的。我没有显示来自 DB 的数据或类似的东西......所以你能帮我得到我的问题的正确答案吗?
    • 上面的网格助手不必与数据源一起使用,它们可以与任何IEnumerable&lt;T&gt;一起使用。上面的问题只问是使用TagBuilder还是Razor.Parse()来生成HTML。听起来你有一个更具体的问题,我会编辑这个以更好地澄清它。
    • @Russ_Cam 我的问题是我应该推荐哪些情况 TagBuilder 以及我应该推荐哪些情况 Razor.Parse
    【解决方案2】:

    第一种方法对内存中的字符串进行操作并正在执行,后者在资源方面更昂贵并且进行文件访问。

    【讨论】:

    • 我知道区别,但我想知道哪些情况我应该推荐TagBuilder,哪些情况我应该推荐Razor.Parse
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多