【问题标题】:In MVC Razor, how do you do a RenderSection defined below a sub-layout?在 MVC Razor 中,如何在子布局下方定义 RenderSection?
【发布时间】:2011-09-29 19:28:39
【问题描述】:

我有一个看起来像这样的顶级 _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 文件中,我将布局设置为 _LeftPane.cshtml 或 _LeftPlusRightPane.cshtml,具体取决于我希望在页面上显示的内容。

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

以下部分已定义但尚未为布局页面“~/Views/Shared/_LeftPlusRightPane.cshtml”呈现:“Header”。

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

【问题讨论】:

  • 你能粘贴你的部分的样子吗?我认为您只是没有正确地将各个部分包装在各个视图中。
  • 我唯一遇到问题的部分是新的标题部分。我认为的一个例子:@section Header { }

标签: asp.net-mvc razor


【解决方案1】:

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

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

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

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

这允许您将内容向上传递。

【讨论】:

  • 谢谢,这正是我想要做的!
  • 谢谢,对我很有帮助
猜你喜欢
  • 2013-08-21
  • 1970-01-01
  • 2011-07-06
  • 2019-12-21
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多