给定这种嵌套布局结构:
~/Views/Shared/_layoutBase.cshtml ~/Views/Shared/_layout.cshtml
其中_layoutBase.cshtml
是_layout.cshtml
的布局。
布局文件中定义的任何部分都会在~/Views/...
但是,对于区域中的视图,从不渲染这些部分。
_layoutBase
:
<script type="text/javascript">
@RenderSection("footerScripts", false)
</script>
</body>
</html>
_layout.cshtml
:
@section footerScripts{
@RenderSection("footerScripts", false)
}
“内容”视图:
@section footerScripts{
$(function () {
SetFocusOnForm("CaptchaCode", "NextButton");
});
}
部分footerScripts
的内容永远不会在某个区域的视图中呈现。它确实在~/Views
文件夹下的视图中呈现。
区_ViewStart.cshtml
:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
你能看到什么问题吗?!
答案 0 :(得分:26)
我无法重现这个问题。这是我的设置和我做的步骤。
添加~/Views/Shared/_LayoutBase.cshtml
:
<!DOCTYPE html>
<html>
<body>
@RenderBody()
<script type="text/javascript">
@RenderSection("footerScripts", false)
</script>
</body>
</html>
将~/Views/Shared/_Layout.cshtml
的内容替换为:
@{
Layout = "~/Views/Shared/_LayoutBase.cshtml";
}
@section footerScripts{
@RenderSection("footerScripts", false)
}
@RenderBody()
右键单击项目并添加管理区域
将TestController添加到此管理区域并添加相应的~/Areas/Admin/Views/Test/Index.cshtml
视图:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
@section footerScripts{
alert('ok');
}
/admin/test/index
答案 1 :(得分:7)
我今天早上起床,立即看到了问题:
我在部分视图中有@section块。在MVC 3中,这将无法工作!!
哎呀!
我非常感谢Darin的努力,这有效地证明了各部分在预期的区域内有效。但真正的原因是这个。
我忘了他们在Partial View中,因为我有一个mvc 3向导,它使用部分视图来执行步骤。它运行得非常好并且一致,如果javascript可用,则使用ajax,忘记你在做什么。
请给达林投票,但这才是真正的答案。