Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的剃须刀';渲染部分';不被孙辈视图继承?_C#_Asp.net Mvc_Asp.net Core_Razor_Templating - Fatal编程技术网

C# 为什么我的剃须刀';渲染部分';不被孙辈视图继承?

C# 为什么我的剃须刀';渲染部分';不被孙辈视图继承?,c#,asp.net-mvc,asp.net-core,razor,templating,C#,Asp.net Mvc,Asp.net Core,Razor,Templating,我正在使用Razor视图的层次结构设置我的ASP.NET核心站点,如下所示: _Layout _PanelLayout Index 所以,我有这些文件: \u ViewStart.cshtml @{ Layout = "_PanelLayout"; } @{ Layout = "_Layout"; } <div>Panel layout file</div> @RenderBody() <html><bod

我正在使用Razor视图的层次结构设置我的ASP.NET核心站点,如下所示:

_Layout
    _PanelLayout
        Index
所以,我有这些文件:


\u ViewStart.cshtml

@{
    Layout = "_PanelLayout";
}
@{
    Layout = "_Layout";
}
<div>Panel layout file</div>
@RenderBody()
<html><body>
    <div>Main layout file</div>
    @RenderBody()
    @RenderSection("scripts", required: false)
</body></html>
@section scripts {
    <script>
        // test script
    </script>
}
<div>Content view</div>
\u PanelLayout.cshtml

@{
    Layout = "_PanelLayout";
}
@{
    Layout = "_Layout";
}
<div>Panel layout file</div>
@RenderBody()
<html><body>
    <div>Main layout file</div>
    @RenderBody()
    @RenderSection("scripts", required: false)
</body></html>
@section scripts {
    <script>
        // test script
    </script>
}
<div>Content view</div>
@{
布局=“_布局”;
}
面板布局文件
@RenderBody()
\u Layout.cshtml

@{
    Layout = "_PanelLayout";
}
@{
    Layout = "_Layout";
}
<div>Panel layout file</div>
@RenderBody()
<html><body>
    <div>Main layout file</div>
    @RenderBody()
    @RenderSection("scripts", required: false)
</body></html>
@section scripts {
    <script>
        // test script
    </script>
}
<div>Content view</div>

主布局文件
@RenderBody()
@RenderSection(“脚本”,必需:false)
Index.cshtml

@{
    Layout = "_PanelLayout";
}
@{
    Layout = "_Layout";
}
<div>Panel layout file</div>
@RenderBody()
<html><body>
    <div>Main layout file</div>
    @RenderBody()
    @RenderSection("scripts", required: false)
</body></html>
@section scripts {
    <script>
        // test script
    </script>
}
<div>Content view</div>
@节脚本{
//测试脚本
}
内容视图

当我运行返回
索引
视图的控制器操作时,我得到错误:

InvalidOperationException:以下部分已定义,但尚未由“\u PanelLayout.cshtml”页面呈现:“脚本”


为什么Razor没有发现索引的祖父母视图正在呈现一个“脚本”部分?如果删除该部分,则布局工作正常,因此唯一的问题是该部分渲染没有执行到祖辈布局。是否有一种解决方案仍然允许我决定在祖父母版面(“U版面”)而不是父版面(“U PanelLayout”)上渲染“脚本”部分的位置?

父版面中的任何部分都必须在子版面中重新定义,否则它们将无法在继承链的更下游使用。换句话说,在
\u PanelLayout.cshtml
中,您需要添加:

@section scripts
{
    @RenderSection("scripts", required: false)
}

这提供了一个钩子,指向引用此布局的下一级布局或视图(
RenderSection
),然后将该布局的输出填充到
\u layout.cshtml

中的部分中。奇怪的是,我在周五遇到了这个问题。迫不及待地想看看它是如何解决的,这样我就可以正确地使用我的布局页面了。你应该检查一下这个问题,看看它是否有帮助。是的,我试过了,它成功了。但我还是不明白为什么剃须刀引擎不能自动完成。这是直观的,不一定。其工作方式是,视图仅查看由其引用的布局直接定义的截面。这个设置允许您隐藏中间部分,实际上我已经使用过很多次了。比如说,我想允许子布局修改页面的某个特定区域,但我不想允许视图修改。我只是没有在子布局中重新定义该部分。它实际上给了你很多力量。