Ich habe drei einfache Layouts,
_Layout.cshtml (dies ist das Basislayout)
@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";
}
Wenn ich versuche, die Indexansicht in einer Aktion zu rendern, habe ich diesen Fehler erhalten.
Die Methode "RenderBody" wurde für die Layoutseite nicht aufgerufen "~/Views/Shared/_Main.cshtml".
Aber warten Sie, _Main.cshtml
hat ein übergeordnetes Layout, das bereits eine RenderBody()
..__ hat. Also irre ich mich, muss ich RenderBody()
für jedes untergeordnete Layout aufrufen?
Ja, RenderBody sollte unabhängig von der Verschachtelung auf jeder Layoutseite enthalten sein.
@RenderBody
fungiert als Platzhalter für die Engine, um zu wissen, wo der Inhalt der Ansicht über die Layoutseite abgelegt werden soll.
Dieser Code sollte ordnungsgemäß funktionieren:
_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>
Abschnitte können optional erstellt werden, indem sie mit required: false
gerendert werden.
@RenderSection("SectionName", required: false)
Versuchen Sie, den Abschnitt in die letzte Ansicht aufzunehmen.
@{
Layout = "~/Views/Shared/_Main.cshtml";
}
@section something {
content
}
UPDATE: Okay, ich habe vergessen zu sagen, dass du @RenderSection auch in _Main Layout schreiben musst
@section something {
Hey I'm actually on the _Main layout.
@RenderSection("something", required:false)
}
enter code here