webentwicklung-frage-antwort-db.com.de

RenderBody () und RenderSection () müssen in jedem untergeordneten Layout vorhanden sein?

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?

20
ocanal

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.

23
Raciel R.

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>

index.cshtml sollte wie folgt dargestellt werden:

<head>
Hey I'm actually on the _Main layout.   
</head>
 <div id="Index Content Here">
</div>
</div>
7
Girish Gupta

Abschnitte können optional erstellt werden, indem sie mit required: false gerendert werden.

@RenderSection("SectionName", required: false)
1

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
0
chromigo