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

В MVC Razor, как вы выполняете RenderSection, определенную ниже под-макета?

У меня есть верхний уровень _Layout.cshtml, который выглядит примерно так:

<html>
<head>
    @RenderSection("Header", required: false)
</head>
<body>

    @RenderSection("LeftPane", required: false)
    @RenderSection("RightPane", required: false)
    @RenderBody()

</body>
</html>

Тогда у меня есть два "подмакеты". Один определяет только раздел LeftPane, другой определяет как LeftPane, так и RightPane. Эти подмакеты называются _LeftPane.cshtml и _LeftPlusRightPane.cshtml, и у них есть макет, установленный на "_Layout.cshtml".

Затем в каждом файле View.cshtml я устанавливаю Layout как _LeftPane.cshtml или _LeftPlusRightPane.cshtml, в зависимости от того, что я хочу показать на странице.

Все работает отлично. Проблема заключается в новом разделе "Заголовок", который я добавил в части <head> документа. Этот раздел не определен в подмакетах, а скорее в фактических представлениях. Когда я пытаюсь что-то посмотреть, я получаю сообщение об ошибке:

Следующие разделы были определены, но не были отображены для страницы макета "~/Views/Shared/_LeftPlusRightPane.cshtml": "Заголовок".

Я не хочу отображать раздел заголовка в подслоях, я хочу отобразить его в файле _Layout.cshtml. Как "пройти" определенный раздел заголовка из представления низкого уровня через вспомогательные макеты вверху _Layout?

4b9b3361

Ответ 1

Можно развернуть макеты. Итак, _Layout2 имеет Layout = "_Layout.cshtml";

Вы также можете использовать файлы _ViewStart в каждой из подпапок View, чтобы указать другой макет по умолчанию для этой подпапки.

Чтобы "пройти" раздел, вы просто делаете что-то вроде этого:

@section Header {@RenderSection("Header", false)}

Это позволяет вам передать содержимое цепи.