【问题标题】:RenderSection() issue in _ViewStart.cshtml_ViewStart.cshtml 中的 RenderSection() 问题
【发布时间】:2011-12-30 04:06:39
【问题描述】:

我在 _Layout.cshtml 中截取了以下代码

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

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

当我添加到我的视图中时

@section subNavig
{
    //some code
}

它工作得很好,但是当我在 _ViewStart 中写这个时,我有一个错误: 当前上下文中不存在名称“DefineSection”

请解释原因,如果可能的话,告诉我如何解决这个问题

【问题讨论】:

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


    【解决方案1】:

    假设如果在 ViewStart 类中定义了 RenderSection,那么 Razor 视图引擎如何知道您正在渲染的部分? RenderSection 在设计上只消耗视图使用它们立即定义的部分。由于 ViewStart 在任何视图请求代码运行之前运行,这就是它在那里不可用的原因。

    这是设计使然。目前,Razor 布局只能使用(渲染)视图使用它们立即定义的部分。您不能拥有布局页面的层次结构,并且在最外层布局中使用最内层视图中定义的部分。

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

    【讨论】:

      【解决方案2】:

      _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>
      

      【讨论】:

        猜你喜欢
        • 2012-06-24
        • 2016-07-30
        • 1970-01-01
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        相关资源
        最近更新 更多