RenderBody和RenderSection之间的区别

时间:2013-01-29 03:32:19

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5

MVC / Razor 语法中,我试图理解为什么我们需要@RenderBody

例如(代码取自example

<html>
    <head>
        <meta charset="utf-8" />
        <title>My WebSite</title>
        <style>
            #container { width: 700px; }
            #left { float: left; width: 150px; }
            #content { padding: 0 210px 0 160px; }
            #right { float: right; width: 200px; }
            .clear { clear: both; }
        </style>
    </head>
    <body>
        <div id="container">
            <div id="left">
                @RenderSection("left", required:false)
            </div>
            <div id="content">
                @RenderBody()
            </div>
            <div id="right">
                @RenderSection("right", required:false)
            </div>
            <div class="clear"></div>
        </div>
    </body>
</html>


@{
      Layout = "~/_3ColLayout.cshtml";
}

<h1>Main Content</h1>

@section left {
    <h1>Left Content</h1>
}

@section right {
    <h1>Right Content</h1>
}

为什么我不能简单地将@RenderSection用于所有内容,例如:

<div id="content">
     @RenderSection("Body", required:true)
</div>

@section Body{
    <h1>Body Content</h1>
}

4 个答案:

答案 0 :(得分:15)

@RenderBody开始,这非常重要。你的_layout必须拥有它。这是您的视图将呈现的位置。如果你把它留下来,你的应用程序将会死亡(我认为在运行时,因为视图没有编译)。

[<强>校正: 如果没有Renderbody,引用此特定布局的View将在运行时死亡。 (重要的是要注意布局本身是可选的。)]

节是在视图中定义的具有相似名称的代码块

    @RenderSection(“Navbar”,必填:false)

在您的视图中可能有相应的代码块。

@section Navbar{
    <!-- Content Here -->
}

我强调 可以 ,因为导航栏已经过required: false

每个View都可以通过_layout共享一段功能/标记。

<强>跟进: 在我适度的MVC开发时,我学会了适度使用部分。

  • 章节对于确保将您的JS引用放在HTML部分中非常有用(尽管这是一种过时的练习。
  • 章节对于顶部和侧面导航非常有用
  • 需要从不的部分。这样做会使你的代码变得脆弱!

答案 1 :(得分:13)

仅仅是因为方便。渲染身体是你最有可能做到的事情,因此有一个专门的功能。让你不要为身体声明一个@section并给出一个更容易调用的功能。

答案 2 :(得分:1)

RenderBody是必需的,因为它是呈现每个视图的内容。 RenderSection有一个可选参数,可让您将该部分标记为不需要。

答案 3 :(得分:0)

here是有关RenderBody()和RenderPage()的基本信息。