Mvc UserControl使用HtmlHelper与HelperResult和MvcHtmlString

我正在使用asp mvc开发一个应用程序,我想为开发人员创建一些友好的控件,比如asp.net WebForms中的Server控件。 在这种情况下,我想创建一个引导面板,它具有一些固定的html并在项目模板中呈现。 我是这样做的:

public static MvcHtmlString BootPanel(this IEnumerable items, Func template, string title = "") { StringBuilder sb = new StringBuilder(); sb.Append("
"); sb.Append("
"); sb.Append(title); sb.Append("
"); sb.Append("
"); var hr = new HelperResult(writer => { foreach (var item in items) { template(item).WriteTo(writer); } }); sb.Append(hr.ToHtmlString()); sb.Append("
"); sb.Append("
"); return MvcHtmlString.Create(sb.ToString()); }

这是剃刀查看:

 @{ var videoGames = new[] { new VideoGame {nombre = "Shadows of mordor", precio = 66}, new VideoGame {nombre = "Spiderman", precio = 50} }; } @videoGames.BootPanel(@
@item.nombre   @item.precio
, "Titulo")

使用引导类正确呈现输出:

在此处输入图像描述

问题是。 这是实现这种控制的正确方法吗?

编辑:

根据你的回答我更新了帮助你使用TagBuilder:

 public static MvcHtmlString BootPanel(this IEnumerable items, Func template, string title = "") { TagBuilder PanelDiv = new TagBuilder("div"); PanelDiv.AddCssClass("panel panel-info"); TagBuilder PanelHeading = new TagBuilder("div"); PanelHeading.AddCssClass("panel-heading"); PanelHeading.SetInnerText(title); TagBuilder PanelBody = new TagBuilder("div"); PanelBody.AddCssClass("panel-body"); var hr = new HelperResult(writer => { foreach (var item in items) { template(item).WriteTo(writer); } }); PanelBody.InnerHtml = hr.ToHtmlString(); PanelDiv.InnerHtml = PanelHeading.ToString() + PanelBody.ToString(); return MvcHtmlString.Create(PanelDiv.ToString()); } 

确保在返回之前编码输出字符串,因为如果有人为标题写了javascript,那么它会导致脚本注入。 除了它外观,但使用硬编码标签,您可以使用TagBuilder类来构建您的HTML代码。 看这个例子 。