В 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?
Ответы
Ответ 1
Можно развернуть макеты. Итак, _Layout2 имеет Layout = "_Layout.cshtml";
Вы также можете использовать файлы _ViewStart в каждой из подпапок View, чтобы указать другой макет по умолчанию для этой подпапки.
Чтобы "пройти" раздел, вы просто делаете что-то вроде этого:
@section Header {@RenderSection("Header", false)}
Это позволяет вам передать содержимое цепи.