RenderBody() и RenderSection () должны быть на каждом дочернем макете?
у меня три простых макета,
файл _Layout.cshtml по (это базовая компоновка)
@RenderSection("something", required: false)
@RenderBody()
_Main.cshtml по
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@section something {
Hey I'm actually on the _Main layout.
}
.cshtml по
@{
Layout = "~/Views/Shared/_Main.cshtml";
}
когда я пытаюсь отобразить представление индекса в действии, я получил эту ошибку,
метод" RenderBody " не был вызван для страницы макета "~/Views / Shared / _Main.cshtml по".
но подождите, _Main.cshtml
есть Родительский макет, который уже имеет RenderBody()
.
Так что я ошибаюсь, Я должен позвонить RenderBody()
для каждого макета ребенка?
4 ответов
да, 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.
}
.cshtml по
@{
Layout = "~/Views/Shared/_Main.cshtml";
}
<div id="Index Content Here">
@RenderBody()
</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