在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());
}
然后通过以下方式在视图中调用我的HTML帮助程序:
@ Html.FrameModuleHeader(1,“我的标题”)
谢谢! /麦克
答案 0 :(得分:5)
我可能会使用部分视图或显示模板,而不是HTML帮助器,因为在C#代码中填充如此多的HTML看起来很难看。
例如,我会有一个视图模型:
public class SomeViewModel
{
public int Type { get; set; }
public string Headline { get; set; }
}
和部分:
@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>
然后:
@Html.Partial("Foo", new SomeViewModel { Type = 1, Headline = "My headline" })
这当然并不意味着您的HTML帮助程序不起作用。通常情况下,HTML助手应该用于生成HTML的小片段,在这个特定的例子中,似乎并非如此。如果在视图中使用,你可以获得HTML intellisense,这可能有助于你识别未封闭的标签,而不是格式正确的HTML,......而在C#中,一切都是一个很大的魔术字符串。
如果你决定使用它,最后要对你的HTML助手说一句:确保你 HTML编码这个Headline
字符串,然后再将其放入字符串构建器中,否则你可能会得到不好的XSS惊喜。
答案 1 :(得分:0)
确实没有推荐的方法。你这样做的方式非常干净。所以我认为没有理由改变它。
答案 2 :(得分:0)
另一种选择是使用部分视图。您可以将它放在/ Views / Shared中,以便它可用于所有内容。这很好的一个原因是它可以更容易编辑而无需推出新的代码库。如果这个输出永远不会改变,那么可能没有必要。
答案 3 :(得分:0)
您当然可以通过删除不必要的html标记来解决由divitus引起的代码膨胀。
public static IHtmlString FrameModuleHeader(this HtmlHelper helper, int Type, string Headline)
{
StringBuilder html = new StringBuilder();
html.Append("<div class='module_top'>");
html.Append("<h4 class='module_top_middle_" + Type + "'>" + HtmlEncode(Headline) + "</h4>");
html.Append("</div>");
return MvcHtmlString.Create(html.ToString());
}