【问题标题】:RenderBody() and RenderSection() must be on every child layout?RenderBody() 和 RenderSection() 必须在每个子布局上?
【发布时间】:2013-08-21 19:24:35
【问题描述】:

我有三个简单的布局,

_Layout.cshtml(这是基本布局)

@RenderSection("something", required: false)
@RenderBody()

_Main.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section something {
   Hey I'm actually on the _Main layout.
}

Index.cshtml

@{
    Layout = "~/Views/Shared/_Main.cshtml";
}

当我尝试在操作中呈现索引视图时,出现此错误,

尚未为布局页面调用“RenderBody”方法 “~/Views/Shared/_Main.cshtml”。

但是等等,_Main.cshtml 的父布局已经有一个RenderBody()。 那么我错了吗,我必须为每个子布局调用RenderBody() 吗?

【问题讨论】:

  • @asymptoticFault,不,这只是一个错误。
  • 我不确定你是否可以使用这样的嵌套布局。
  • 是的,您可以嵌套布局。通常你可以有不同的内部布局页面或有条件地在你的视图中显示内容。
  • 啊,好吧,我自己没试过。
  • 因为你使用_Main.cshtml作为布局页面,所以你需要添加RenderBody()

标签: asp.net asp.net-mvc asp.net-mvc-4 razor razor-2


【解决方案1】:

是的,无论嵌套如何,每个布局页面都应该包含 RenderBody。

@RenderBody 用作引擎的占位符,以了解使用布局页面将视图内容放置在何处。

【讨论】:

    【解决方案2】:

    这段代码应该可以正常工作:

    _Layout.cshtml

    @RenderSection("something", required: false)
    @RenderBody()
    

    _Main.cshtml

    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
     }
    @section something {
       Hey I'm actually on the _Main layout.
    }
    

    Index.cshtml

    @{
        Layout = "~/Views/Shared/_Main.cshtml";
     }
    <div id="Index Content Here">
     @RenderBody()
     </div>
    

    index.cshtml 应该如下呈现:

    <head>
    Hey I'm actually on the _Main layout.   
    </head>
     <div id="Index Content Here">
    </div>
    </div>
    

    【讨论】:

      【解决方案3】:

      可以通过使用required: false 渲染部分来使其成为可选

      @RenderSection("SectionName", required: false)
      

      【讨论】:

        【解决方案4】:

        尝试在最后一个视图中包含部分。

        @{
            Layout = "~/Views/Shared/_Main.cshtml";
        }
        
        @section something {
            content
        }
        

        更新:好的,我想说你还需要在_Main布局中编写@RenderSection

        @section something {
            Hey I'm actually on the _Main layout.
            @RenderSection("something", required:false)
        }
        enter code here
        

        【讨论】:

          猜你喜欢
          • 2013-01-12
          • 1970-01-01
          • 2013-06-25
          • 2020-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-12
          • 1970-01-01
          相关资源
          最近更新 更多