在我的共享布局中,我希望有一个“脚本”部分来填充页面功能所需的所有脚本。
Layout.cshtml
<html>
<head>
<title>Test</title>
<script src="@Url.Content("~/Scripts/jquery-2.0.3.js")" type="text/javascript"> </script>
@RenderSection("Scripts", required: false)
</head>
<body>
@RenderBody()
</body>
</html>
所以,我的视图加载了一个特定的javascript,我希望它在“脚本”部分,并且它正在工作。
Index.cshtml
@model PlatformaPu.Areas.Inventura.Models.Home.Index
@section Scripts {
<script src="@Url.Content("~/Areas/Inventura/Scripts/Home/Index.js")" type="text/javascript"></script>
}
{CONTENT REMOVED FOR BREVITY}
@section Footer {
@Html.Partial("~/Views/Shared/_AppSelector.cshtml", Model.AppSelector)
}
最后,我的视图呈现部分,我有一个部分加载的javascript。
_AppSelector.cshtml
@model PlatformaPu.Models.Shared._AppSelector
@section Scripts {
<script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script>
}
{CONTENT REMOVED FOR BREVITY}
...这 NOT 正在工作 - javascript标记在
我该怎么做?
答案 0 :(得分:13)
如this question中所述,无法在局部视图中使用部分:
节在部分视图中不起作用,这是设计的。您可以使用一些自定义帮助程序来实现类似的行为,但老实说,视图的责任是包含必要的脚本,而不是部分责任。我建议你使用主视图的@scripts部分来做到这一点,而不要让部分人担心脚本。
您应该将脚本引用添加到引用部分的主视图。
答案 1 :(得分:3)
这是我的第一个答案!
我多年来一直在使用网络表格,现在我正在处理MVC 5.很难。
也许是错误的解决方案,但有效:)
在Layout.cshtml中。添加第二个&#34; ScriptsPartial&#34;栏目
@RenderSection("ScriptsPartial", required: false)
在Index.cshtml中,添加&#34;,新的ViewDataDictionary(ViewData){{&#34; ViewPage&#34;,this}}&#34;
@section Footer {
@Html.Partial("~/Views/Shared/_AppSelector.cshtml", Model.AppSelector, new ViewDataDictionary(ViewData) { { "ViewPage", this } })
}
在_AppSelector.cshtml中,删除此
@section Scripts {
<script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script>
}
在_AppSelector.cshtml中,可以在任何地方添加
@{
if (ViewData.ContainsKey("ViewPage"))
{
System.Web.Mvc.WebViewPage viewPage = (System.Web.Mvc.WebViewPage)ViewData["ViewPage"];
viewPage.DefineSection("ScriptsPartial", () =>
{
// viewPage.Write(Scripts.Render("~/AppSelector/Scripts")); // If you use a Bundle
viewPage.WriteLiteral("<script src=\"" + Url.Content("~/Scripts/Shared/_AppSelector.js") + "\" type=\"text/javascript\"></script>");
});
}
}
Just&#34;发送&#34; PartialView的视图(没有像WebForms中的Parent属性?)并使用它来向&#34; ScriptsPartial&#34;添加内容。部分。
&#34; ScriptsPartial&#34;是必需的,因为DefineSection会抛出一个错误&#34;已定义的部分:Scripts&#34;
因此,只有一个PartialView可以使用&#34; ScriptsPartial&#34;部分......不太好解决。
致以最诚挚的问候,
Paco Ferre