MVC 3,调用此HTML的最佳方式

Mik*_*keB 1 asp.net-mvc asp.net-mvc-3

在MVC 3中创建一个站点,我有这个代码片段,我在设计的几个部分使用.这是一个为网站上的模块创建头部的设计代码.现在想知道这是否是调用此代码段的最佳方式?我应该使用助手还是有更好的方法?

今天我喜欢这样:

    public static IHtmlString FrameModuleHeader(this HtmlHelper helper, int Type, string Headline)
    {
        StringBuilder html = new StringBuilder();
            html.Append("<div class='module_top'>");
                html.Append("<div class='module_top_left'></div>");
                html.Append("<div class='module_top_middle_" + Type + "'><div class='module_top_headline'><h4>" + Headline + "</h4></div></div>");
                html.Append("<div class='module_top_right'></div>");
            html.Append("</div>");
        return MvcHtmlString.Create(html.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

然后通过以下方式在视图中调用我的HTML帮助程序:

@ Html.FrameModuleHeader(1,"我的标题")

谢谢!/麦克风

Dar*_*rov 5

我可能会使用部分视图或显示模板,而不是HTML帮助器,因为在C#代码中填充如此多的HTML看起来很丑陋.

所以例如我会有一个视图模型:

public class SomeViewModel
{
    public int Type { get; set; }
    public string Headline { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和部分:

@model AppName.Models.SomeViewModel

<div class="module_top">
    <div class="module_top_left"></div>
    <div class="module_top_middle_@(Model.Type)">
        <div class="module_top_headline">
            <h4>@Model.Headline</h4>
        </div>
    </div>
    <div class="module_top_right"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后:

@Html.Partial("Foo", new SomeViewModel { Type = 1, Headline = "My headline" })
Run Code Online (Sandbox Code Playgroud)

这当然并不意味着您的HTML帮助程序不起作用.通常情况下,HTML助手应该用于生成HTML的小片段,在这个特定的例子中,似乎并非如此.如果在视图中使用,你可以获得HTML intellisense,这可能有助于你识别未封闭的标签,而不是格式正确的HTML,...而在C#内部,一切都是一个很大的魔术字符串.

如果你决定使用它,那么关于你的HTML助手的最后一句话是:确保你在将这个字符串放入字符串构建器之前对其进行HTML编码,Headline否则你可能会得到糟糕的XSS意外.