Ответ 1
Да, RenderBody должен быть включен на каждую страницу макета, независимо от вложенности.
@RenderBody
работает как заполнитель для механизма, чтобы знать, где удалить содержимое представления с помощью страницы макета.
У меня есть три простых макета,
_Layout.cshtml (это базовый макет)
@RenderSection("something", required: false)
@RenderBody()
_Main.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@section something {
Hey I'm actually on the _Main layout.
}
Index.cshtml
@{
Layout = "~/Views/Shared/_Main.cshtml";
}
Когда я пытаюсь отобразить индексный указатель в действии, я получил эту ошибку,
Метод "RenderBody" не был вызван для страницы макета "~/Views/Shared/_Main.cshtml".
Но подождите, _Main.cshtml
имеет родительский макет, который уже имеет RenderBody()
.
Так что я ошибаюсь, я должен называть RenderBody()
для каждого дочернего макета?
Да, RenderBody должен быть включен на каждую страницу макета, независимо от вложенности.
@RenderBody
работает как заполнитель для механизма, чтобы знать, где удалить содержимое представления с помощью страницы макета.
Этот код должен работать правильно:
_Layout.cshtml
@RenderSection("something", required: false)
@RenderBody()
_Main.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@section something {
Hey I'm actually on the _Main layout.
}
Index.cshtml
@{
Layout = "~/Views/Shared/_Main.cshtml";
}
<div id="Index Content Here">
@RenderBody()
</div>
<head>
Hey I'm actually on the _Main layout.
</head>
<div id="Index Content Here">
</div>
</div>
Разделы могут быть сделаны необязательными, создавая их с помощью required: false
@RenderSection("SectionName", required: false)
Попробуйте включить раздел в последнее представление.
@{
Layout = "~/Views/Shared/_Main.cshtml";
}
@section something {
content
}
ОБНОВЛЕНИЕ: Хорошо, я хочу сказать, что вам также нужно написать @RenderSection в _Main layout
@section something {
Hey I'm actually on the _Main layout.
@RenderSection("something", required:false)
}
enter code here