我在_Layout.cshtml中删除了以下代码
<div id="sub-navig-container">
@RenderSection("subNavig")
</div>
<div id="text-content">
@RenderBody()
</div>
当我在我的视图中添加
@section subNavig
{
//some code
}
它工作正常,但是当我在_ViewStart中写这个时,我有一个错误: 当前上下文中不存在名称“DefineSection”
请解释原因,如果可能,请说明如何解决此问题
答案 0 :(得分:21)
_ViewStart是一个特殊视图,它源自ViewStartPage
而不是其他视图派生的WebViewPage
。并且ViewStartPage
类没有DefineSection
方法。因此,您无法在此文件中定义部分。您可以直接在布局中为此部分提供默认内容:
<div id="sub-navig-container">
@if (!IsSectionDefined("subNavig"))
{
// some default code
}
else
{
// render the code that was overridden in the child view
@RenderSection("subNavig")
}
</div>
答案 1 :(得分:1)
假设是否在ViewStart类中定义了RenderSection,那么Razor视图引擎如何了解您正在渲染的部分? RenderSection在设计上仅使用视图使用它们定义的部分。由于ViewStart在任何视图请求代码运行之前运行,因此这就是它在那里不可用的原因。
这是设计的。目前,Razor布局只能使用它们消耗(渲染)视图定义的部分。您不能拥有布局页面的层次结构,并且在最外层布局中使用最内层视图中定义的部分。