RenderBody() et RenderSection () doivent être sur chaque disposition enfant?

j'ai trois de mise en page simple,

_Layout.cshtml (c'est la présentation de la base)

@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";
}

quand j'essaie de rendre la vue D'Index dans une action, j'obtiens cette erreur,

la méthode "RenderBody" n'a pas été appelée pour la page de mise en page "~/Views / Shared / _Main.cshtml".

Mais attendez, _Main.cshtml a un layout parent qui a déjà un RenderBody(). Donc je suis mal, dois-je appeler RenderBody() pour chaque disposition d'enfant?

20
demandé sur Rudi Visser 2013-08-20 01:15:40

4 réponses

Oui, RenderBody devrait figurer sur chaque page de mise en page, quel que soit le site de nidification.

@RenderBody fonctionne comme un paramètre pour le moteur de savoir où déposer le contenu de la vue en utilisant la page de mise en page.

23
répondu Raciel R. 2014-04-11 11:09:48

Ce code devrait fonctionner correctement:

_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 doit être rendu comme ci-dessous:

<head>
Hey I'm actually on the _Main layout.   
</head>
 <div id="Index Content Here">
</div>
</div>
7
répondu Girish Gupta 2014-09-23 04:13:44

les Sections peuvent être rendues optionnelles en les rendant avec required: false

@RenderSection("SectionName", required: false)
1
répondu Georg Patscheider 2016-04-05 15:38:52

essayez d'inclure la section dans la dernière vue.

@{
    Layout = "~/Views/Shared/_Main.cshtml";
}

@section something {
    content
}

mise à jour: OK, je ne suis pas d'accord pour dire que vous avez aussi besoin d'écrire @RenderSection dans _main layout

@section something {
    Hey I'm actually on the _Main layout.
    @RenderSection("something", required:false)
}
enter code here
0
répondu chromigo 2016-04-05 20:49:06