我正在从数据库中检索所有视图的标签形式和形状的统计信息,<script>
其中一些将进入.<head>
<body>
其中一些信息由所有视图共享,例如谷歌分析,但其他信息仅特定于某些视图,例如仅在订单确认视图中可用的订单详细信息。
最终结果必须是:
<head>
<script><!-- Google Analytics --></script>
</head>
我在布局中使用命名部分来实现我想要的:
<head>
@RenderSection("headScripts", required: false)
</head>
<body>
@RenderSection("bodyScripts", required: false)
</body>
示例视图代码是:
@if ((Model.Scripts.Head != null) && (Model.Scripts.Head.Count() != 0))
{
<text>
@section headScripts
{
@foreach (var script in Model.Scripts.Head)
{
@Html.Raw(@script.Code);
}
}
</text>
}
所有视图模型都从具有 Scripts 字段的基类继承,并且我上面粘贴的代码在我的所有视图中都被复制,这是一个问题。
</body>
我试图将代码移动到 PartialView,从我的布局下方的这一行开始:
@{Html.RenderAction("Index", "Scripts");}
在我的 ScriptsController 中:
public ActionResult Index()
{
Scripts scripts = new Scripts();
scripts.Head = whatever comes from the database;
scripts.Body = whatever comes from the database;
return PartialView("/Views/Shared/scripts.cshtml", scripts);
}
一切正常,模型已正确填充并在脚本 Partial View 中可用,但遗憾@section
的是无法在 PartialView 中调用,因此<script>
不会显示标签。
是否有任何解决方法@if ((Model.Scripts.Head != null) && (Model.Scripts.Head.Count() != 0))
以及将其余代码放在所有视图使用的一个公共位置?