为什么我的 Razor 'RenderSection' 没有被孙视图继承?
Why does my Razor 'RenderSection' not get inherited by a grandchild view?
我正在使用 Razor 视图层次结构设置我的 ASP.NET 核心站点,如下所示:
_Layout
_PanelLayout
Index
所以,我有这些文件:
_ViewStart.cshtml
@{
Layout = "_PanelLayout";
}
_PanelLayout.cshtml
@{
Layout = "_Layout";
}
<div>Panel layout file</div>
@RenderBody()
_Layout.cshtml
<html><body>
<div>Main layout file</div>
@RenderBody()
@RenderSection("scripts", required: false)
</body></html>
Index.cshtml
@section scripts {
<script>
// test script
</script>
}
<div>Content view</div>
当我 运行 控制器操作 returns Index
视图时,我得到错误:
InvalidOperationException: The following sections have been defined but have not been rendered by the page at '_PanelLayout.cshtml': 'scripts'.
为什么 Razor 不接受 Index 的 grandparent 视图正在呈现 'scripts' 部分这一事实?如果我删除该部分,布局工作正常,所以唯一的问题是这个部分渲染没有执行到 grandparent 布局。有没有解决这个问题的方法,它仍然允许我决定在 grandparent 布局('_Layout')而不是 parent 布局(' _PanelLayout')?
父布局中的任何部分都必须在子布局中重新定义,否则它们在继承链的下游将不可用。也就是说,在_PanelLayout.cshtml
中你需要添加:
@section scripts
{
@RenderSection("scripts", required: false)
}
这为引用该布局 (RenderSection
) 的下一级布局或视图提供了一个挂钩,然后将其输出填充到 _Layout.cshtml
中的部分。
我正在使用 Razor 视图层次结构设置我的 ASP.NET 核心站点,如下所示:
_Layout
_PanelLayout
Index
所以,我有这些文件:
_ViewStart.cshtml
@{
Layout = "_PanelLayout";
}
_PanelLayout.cshtml
@{
Layout = "_Layout";
}
<div>Panel layout file</div>
@RenderBody()
_Layout.cshtml
<html><body>
<div>Main layout file</div>
@RenderBody()
@RenderSection("scripts", required: false)
</body></html>
Index.cshtml
@section scripts {
<script>
// test script
</script>
}
<div>Content view</div>
当我 运行 控制器操作 returns Index
视图时,我得到错误:
InvalidOperationException: The following sections have been defined but have not been rendered by the page at '_PanelLayout.cshtml': 'scripts'.
为什么 Razor 不接受 Index 的 grandparent 视图正在呈现 'scripts' 部分这一事实?如果我删除该部分,布局工作正常,所以唯一的问题是这个部分渲染没有执行到 grandparent 布局。有没有解决这个问题的方法,它仍然允许我决定在 grandparent 布局('_Layout')而不是 parent 布局(' _PanelLayout')?
父布局中的任何部分都必须在子布局中重新定义,否则它们在继承链的下游将不可用。也就是说,在_PanelLayout.cshtml
中你需要添加:
@section scripts
{
@RenderSection("scripts", required: false)
}
这为引用该布局 (RenderSection
) 的下一级布局或视图提供了一个挂钩,然后将其输出填充到 _Layout.cshtml
中的部分。