RenderBody和RenderSection之间的区别

Pra*_*bhu 23 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5

MVC/Razor语法中,我试图理解我们需要的原因@RenderBody.

例如(取自代码示例)

<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>
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能简单地@RenderSection用于所有事情,如下所示:

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

@section Body{
    <h1>Body Content</h1>
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ich 15

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

[ 更正: 如果没有Renderbody,引用此特定布局的视图将在运行时死亡.(重要的是要注意布局本身是可选的.)]

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

@RenderSection("Navbar",必填:false)

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

@section Navbar{
    <!-- Content Here -->
}
Run Code Online (Sandbox Code Playgroud)

我强调可能因为Navbar是delcaredrequired: false

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

后续: 在我适度的MVC开发时,我学会了适度使用部分.

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


bas*_*rat 13

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