我在这个主题上看了几篇帖子:
Razor Nested Layouts with Cascading Sections
MVC 3 - Nested layouts - sections don't render in Areas
它似乎总是有问题的。然而,他们都很老了,所以想知道事情是否已经发生了变化。
基本上我有一个主布局,以及3个不同的主体模板,基于它是什么类型的页面。例如:
_Layout.cshtml
<html lang="en">
<head>
</head>
<body style="padding: 50px 0;">
<header class="navbar navbar-default navbar-fixed-top" role="banner">
@Html.Partial("_MenuPartial")
</header>
<ol class="breadcrumbs">
@RenderSection("breadcrumbs", true);
</ol>
<section>
@RenderBody();
</section>
<footer class="navbar navbar-default navbar-fixed-bottom">
@Html.Partial("_FooterPartial")
</footer>
@Html.Partial("_ScriptInitPartial")
</body>
</html>
_LayoutForEdit.cshtml
<div class="panel panel-primary">
<div class="panel-body">
<div class="col-lg-2">
<ul class="nav nav-pills nav-stacked">
@RenderSection("tabs", true)
</ul>
</div>
<div class="col-lg-10">
<div class="tab-content">
@RenderBody()
</div>
</div>
</div>
<div class="panel-footer">
<button class="btn btn-primary" data-bind="enable: Entity.isValid, click: save">Save</button>
</div>
</div>
现在调用时渲染效果很好。几乎。
部分的渲染必须在看起来像子布局中。如果我尝试将面包屑放在_Layout.cshtml
中,它将失败,因为_LayoutForEdit.cshtml
从未呈现它。我该如何解决这个问题?
The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_LayoutForEdit.cshtml": "breadcrumbs".
答案 0 :(得分:33)
我知道这是一个老问题。无论如何,我以为我会分享这个,以防其他人遇到这个(就像我一样)。
在子布局的底部,您可以定义一个与父布局中的部分同名的部分。在本节的内部,您只需输入@RenderSection
,再次指定与之前相同的名称。一旦这个到位,你基本上就有了孩子的布局&#34;绕过&#34;页面内容,直至其父布局:
@section breadcrumbs {
@RenderSection("breadcrumbs", true)
}
答案 1 :(得分:2)
不确定您是否还需要帮助,但无论如何我都会回答。
RenderSection方法根据具体情况采用以下参数 的 MSDN Documentation 强>:
public HelperResult RenderSection(
string name,
bool required
)
Parameters
name
Type: System.String
The section to render.
required
Type: System.Boolean
true to specify that the section is required; otherwise, false.
将通话更改为:
@RenderSection(&#34; breadcrumbs&#34;,false);
如果要求&#34;要求&#34;参数为false,如果视图未包含该部分,则不会出错。