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