Asp.net mvc 4 在局部视图中使用截面
在我的共享布局中,我希望有一个“脚本”部分来填充页面功能所需的所有脚本 Layout.cshtmlAsp.net mvc 4 在局部视图中使用截面,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,在我的共享布局中,我希望有一个“脚本”部分来填充页面功能所需的所有脚本 Layout.cshtml <html> <head> <title>Test</title> <script src="@Url.Content("~/Scripts/jquery-2.0.3.js")" type="text/javascript"> </script> @RenderSection("Scripts", r
<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>
@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)
}
@model PlatformaPu.Models.Shared._AppSelector
@section Scripts {
<script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script>
}
{CONTENT REMOVED FOR BREVITY}
试验
@RenderSection(“脚本”,必需:false)
@RenderBody()
因此,我的视图加载了一个特定的javascript,我希望它位于“脚本”部分,并且可以正常工作
Index.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>
@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)
}
@model PlatformaPu.Models.Shared._AppSelector
@section Scripts {
<script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script>
}
{CONTENT REMOVED FOR BREVITY}
@model PlatformaPu.Areas.Inventura.Models.Home.Index
@节脚本{
}
{为简洁起见删除了内容}
@节尾{
@Html.Partial(“~/Views/Shared/_AppSelector.cshtml”,Model.AppSelector)
}
最后,我的视图呈现一个部分,我有一个javascript,该部分加载
\u AppSelector.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>
@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)
}
@model PlatformaPu.Models.Shared._AppSelector
@section Scripts {
<script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script>
}
{CONTENT REMOVED FOR BREVITY}
@model PlatformaPu.Models.Shared.\u AppSelector
@节脚本{
}
{为简洁起见删除了内容}
…这不起作用-javascript标记未在“脚本”部分中呈现
如何执行此操作?如中所述,不可能在局部视图中使用节:
剖面在局部视图中不起作用,这是出于设计。您可以使用一些自定义帮助程序来实现类似的行为,但老实说,包含必要的脚本是视图的责任,而不是分部的责任。我建议您使用主视图的@scripts部分来实现这一点,而不要让部分人员担心脚本
您应该将脚本引用添加到引用分部的主视图。这是我的第一个答案 我多年来一直在使用webforms,现在我正在处理MVC5。有点难 也许是错误的解决方案,但有效:) 在Layout.cshtml中。添加第二个“脚本空间”部分
@RenderSection("ScriptsPartial", required: false)
在Index.cshtml中,添加“新建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>");
});
}
}
@{
if(ViewData.ContainsKey(“ViewPage”))
{
System.Web.Mvc.WebViewPage viewPage=(System.Web.Mvc.WebViewPage)ViewData[“viewPage”];
viewPage.DefineSection(“scriptsparial”,()=>
{
//viewPage.Write(Scripts.Render(“~/AppSelector/Scripts”);//如果使用捆绑包
viewPage.WRITELETERAL(“”);
});
}
}
只需将视图“发送”到PartialView(没有WebForms中的父属性?),并使用它将内容添加到“ScriptSpatial”部分
“ScriptSpatial”是必需的,因为DefineSection抛出错误“已定义的部分:脚本”
所以,只有一个PartialView可以使用“ScriptSpatial”部分。。。不是很好的解决方案
致以最良好的祝愿
帕科·费雷(Paco Ferre)我同时发现了这一点;但是,我现在想知道它是否是一个好的设计…你的意思是在主视图中引用脚本是否是一个好的设计?为什么您认为它可能不是?我的意思是引用子依赖项所需的脚本。这可能是一个糟糕的设计。为什么我要在主视图中添加一个只由一个页面使用的脚本,它使用我的部分视图??所以,我的应用程序的每一页都会有这个未使用的引用!