23

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

为什么我不能简单地@RenderSection用于一切,像这样:

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

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

4 回答 4

15

从 开始@RenderBody,这很重要。您的 _layout 必须拥有它。这是您的视图将被渲染的地方。如果你忽略它,你的应用程序将会死掉(我认为在运行时,因为视图没有被编译)。

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

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

@RenderSection(“导航栏”,必需:假)

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

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

我强调可能是因为导航栏已被删除required: false

部分是每个视图可以与 _layout 共享功能/标记的一种方式。

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

  • 节对于确保将 JS 引用放在 HTML 节中很有用(尽管这是一种过时的做法。
  • 部分对顶部和侧面导航很有用
  • 从不要求章节。这样做会使您的代码变得脆弱!
于 2013-01-29T03:41:47.287 回答
13

只是因为方便。渲染身体是你最有可能做的事情,所以最好有一个专门的功能。防止您为正文声明 @section 并提供更容易调用的函数。

于 2013-01-29T03:35:46.533 回答
1

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

于 2013-01-29T03:34:16.607 回答
0

这里是关于 RenderBody() 和 RenderPage() 的基本信息。

于 2019-07-29T18:14:34.523 回答