问题描述
我目前正在处理一个asp.net MVC Web应用程序,在该应用程序中,我必须生成或多或少复杂的HTML结构,然后将其插入Razor页面。目前,我生成带有字符串连接的HTML,然后将字符串添加到控制器中的ViewBag中,如下所示:
public class SomeController : Controller
{
public IActionResult Index()
{
string htmlString = "<div id=\"example-div\">Some more Stuff</div>" + "Some more HTML strings";
Viewbag.htmlString = htmlString;
return View();
}
}
然后我像这样在我的Razor页面内部访问该字符串并将其渲染为HTML:
@Html.Raw(ViewBag.htmlString)
但这不是最佳实践。有没有更好的方法可以在控制器内部实际生成HTML DOM元素,然后将该元素像模板一样加载到剃须刀页面中?如果可以,怎么办?
谢谢
解决方法
在这里您可以创建自己的自定义扩展帮助程序。
-
创建静态类
-
创建静态方法
-
在web.config视图文件夹中注册名称空间以在以下位置进行全局访问 所有页面
- 创建一个班级
public static class HtmlHelpers
{
public static MvcHtmlString RenderTemplate(this HtmlHelper helper,string moreHtml=default(string))
{
MvcHtmlString ohtml = null;
StringBuilder builder=new StringBuilder();
builder.Append("<div id=\"example-div\">");
builder.Append("Some more Stuff");
builder.Append(moreHtml);
builder.Append("</div>");
ohtml =new MvcHtmlString(builder.ToString());
return ohtml;
}
}
- 在
namespaces
属性内的web.config中注册类名称空间
<add namespace="YOURNAMESPACE"/>
- 打开任何cshtml页面,然后尝试键入此关键字。
@Html.RenderTemplate() // Default template
@Html.RenderTemplate("<span>More stuff</span>") // Customized template