_ViewStart.cshtml中的RenderSection()问题

时间:2011-11-16 06:47:04

标签: .net asp.net-mvc asp.net-mvc-3 razor

我在_Layout.cshtml中删除了以下代码

<div id="sub-navig-container">
    @RenderSection("subNavig")
</div>

<div id="text-content">
    @RenderBody()
</div>

当我在我的视图中添加

@section subNavig
{
    //some code
}

它工作正常,但是当我在_ViewStart中写这个时,我有一个错误: 当前上下文中不存在名称“DefineSection” enter image description here

请解释原因,如果可能,请说明如何解决此问题

2 个答案:

答案 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布局只能使用它们消耗(渲染)视图定义的部分。您不能拥有布局页面的层次结构,并且在最外层布局中使用最内层视图中定义的部分。

http://forums.asp.net/t/1623650.aspx/1