我有一个_ViewStart定义我的项目的主布局(页眉,页脚)。
在这个项目中,我有几个领域。每个区域都有相同的页眉和页脚,以及自己的侧面菜单。为此,我在该区域的根目录上创建了一个_ViewStart。这是(简化)代码:
/Views/_ViewStart.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
/Views/Shared/_Layout.cshtml
<html>
<div>
//header
</div>
<div>
@RenderBody
</div>
</html>
区域Foo - &gt; /Areas/Foo/Views/_ViewStart.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="row">
<div class="sidemenu">
//default sidemenu for this area
</div>
<div>
@RenderBody()
</div>
</div>
页面/Areas/Foo/Views/Bar/Index.cshtml将无法呈现,我收到此错误:
CS0103:当前上下文中不存在“RenderBody”名称
如何实现这种母版页面嵌套?
答案 0 :(得分:9)
我讨厌回答我自己的问题,但是在这里:
如果你想在那里使用RenderBody,你不能直接在你所在区域的_ViewStart上引用网站的根_ViewStart。
所以解决方案是:
/Views/_ViewStart.cshtml 引用 /Views/Shared/_MainLayout.cshtml
/Areas/Foo/Views/_ViewStart.cshtml 引用 /Areas/Foo/Views/Shared/_AreaLayout.cshtml
/Areas/Foo/Views/Shared/_AreaLayout.cshtml 参考 /Views/Shared/_MainLayout.cshtml
就是这样。您必须使用“共享”文件夹才能使用“RenderBody()”方法。