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

В синтаксисе MVC/Razor я пытаюсь понять, зачем нам нужен @RenderBody .

Например (код, взятый из пример )

<html>
    <head>
        <meta charset="utf-8" />
        <title>My WebSite</title>
        
    </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";
}

Main Content

@section left {
    

Left Content

}

@section right {
    

Right Content

}

Почему я не могу просто использовать @RenderSection для всего, как это:

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

@section Body{
    

Body Content

}
22
nl ja de

3 ответы

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

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

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

@RenderSection("Navbar", required: false)

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

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

I emphasize could because the Navbar is delcared required: false

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

Followup: In my modest time of MVC development I have learned to make modest use of sections.

  • Разделы полезны для обеспечения того, чтобы ваши ссылки JS помещались в ваш раздел HTML (хотя это устаревшая практика.
  • Разделы полезны для верхних и боковых навигаторов
  • Требуются разделы никогда . Для этого ваш хрупкий код!
15
добавлено
Спасибо за ввод. Мне было интересно, почему RenderBody был включен в структуру для начала, когда вместо этого можно было использовать RenderSection. Однако, как сказал @ Басарат Али, кажется, что он был добавлен для удобства.
добавлено автор Prabhu, источник
это был хороший вопрос. Недостаточно внимания уделяется этому.
добавлено автор Dave Alperovich, источник
@bingles, вы создали страницу макета без RenderBody ()?
добавлено автор Dave Alperovich, источник
Возможно, что это не всегда так, но @RenderBody() на самом деле не требуется. AS, упомянутый в других ответах, полезен для удобства, а также для соглашения по умолчанию.
добавлено автор bingles, источник
Да. Пробовал это сегодня.
добавлено автор bingles, источник

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

13
добавлено
Спасибо за разъяснение, что роль RenderBody была только для удобства.
добавлено автор Prabhu, источник

RenderBody is required, as it's what renders each view. RenderSection has an optional parameter that lets you mark the section as not required.

1
добавлено
Спасибо, мой вопрос, хотя почему я не могу использовать RenderSection для тела, - почему нам нужна другая директива ... тело - это, в конце концов, раздел страницы.
добавлено автор Prabhu, источник
Похоже, что это просто добавило бы больше накладных расходов для каждого вида, поскольку все должно было существовать в одном разделе или другом, так же как и страницы WebForms, которые использовали мастер-страницы, необходимые для того, чтобы иметь весь свой контент в хранилище контента или три. Я лично предпочитаю подразумеваемый раздел тела.
добавлено автор Tieson T., источник
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)