在MVC Razor中,如何在子布局下面定义RenderSection?

时间:2011-09-29 19:28:40

标签: asp.net-mvc razor

我有一个顶级的_Layout.cshtml,看起来像这样:

<html>
<head>
    @RenderSection("Header", required: false)
</head>
<body>

    @RenderSection("LeftPane", required: false)
    @RenderSection("RightPane", required: false)
    @RenderBody()

</body>
</html>

然后我有两个“子布局”。一个只定义LeftPane部分,另一个定义LeftPane和RightPane。这些子布局称为_LeftPane.cshtml和_LeftPlusRightPane.cshtml,它们的布局设置为“_Layout.cshtml”。

然后在每个View .cshtml文件中,我将Layout设置为_LeftPane.cshtml或_LeftPlusRightPane.cshtml,具体取决于我想要在页面上显示的内容。

一切正常。问题在于我在文档的<head>部分添加了新的“标题”部分。此部分未在子布局中定义,而是在实际视图中定义。当我尝试以这种方式查看某些内容时,我收到错误:

以下部分已定义,但尚未针对布局页面“〜/ Views / Shared / _LeftPlusRightPane.cshtml”:“标题”进行渲染。

我不想在子布局中渲染Header部分,我想在_Layout.cshtml文件中渲染它。如何从低级视图,子布局到顶部_Layout“通过”定义的标题部分?

1 个答案:

答案 0 :(得分:25)

您可以嵌套布局。所以_Layout2有Layout = "_Layout.cshtml";

您还可以在每个View子文件夹中使用_ViewStart文件,为该子文件夹指定不同的默认布局。

要“通过”该部分,您只需执行以下操作:

@section Header {@RenderSection("Header", false)}

这允许您将内容传递到链中。