Подтвердить что ты не робот

Разница между RenderBody и RenderSection

В синтаксисе 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>
}
4b9b3361

Ответ 1

Просто из-за удобства. Оказание тела - это то, что вы, скорее всего, сделаете так хорошо, чтобы иметь для этого специальную функцию. Не позволяет вам объявлять @section для тела и дает более удобную функцию вызова.

Ответ 2

Начните с @RenderBody, это очень важно. Ваш _layout должен иметь это. Здесь будет отображаться ваш взгляд. Если вы оставите это, ваше приложение умрет (я думаю, что во время выполнения, поскольку Views не скомпилированы).

[ Исправление: Без Renderbody представление, ссылающееся на этот конкретный макет, будет умирать во время выполнения. (Важно отметить, что сами макеты необязательны.)]

Разделы - это кодовые блоки, определенные в вашем представлении с похожими именами

  @RenderSection ( "Navbar", обязательно: false)

может иметь соответствующий код в вашем представлении.

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

Я подчеркиваю может, потому что Navbar делится required: false

Разделы - это способ, с помощью которого каждый вид может совместно использовать часть функциональности/разметки с помощью _layout.

Followup: В свое скромное время разработки MVC я научился скромно использовать разделы.

  • Разделы полезны для обеспечения того, чтобы ваши ссылки JS помещались в ваш раздел HTML (хотя это устаревшая практика.
  • Разделы полезны для верхних и боковых навигаторов
  • Требуются разделы никогда. Для этого ваш хрупкий код!

Ответ 3

RenderBody требуется, так как он отображает каждое представление. RenderSection имеет необязательный параметр, который позволяет отмечать раздел как необязательный.

Ответ 4

здесь - основная информация о RenderBody() и RenderPage().