J'ai trois disposition simple,
_Layout.cshtml (c'est la disposition de 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";
}
Lorsque j'essaie de rendre la vue Index dans une action, j'ai cette erreur,
La méthode "RenderBody" n'a pas été appelée pour la page de présentation "~/Vues/Partagé/_Main.cshtml".
Mais attendez, _Main.cshtml
a une mise en page parent qui a déjà une RenderBody()
. Je me trompe, dois-je appeler RenderBody()
pour chaque mise en page enfant?
Oui, RenderBody doit être inclus sur chaque page de présentation, quelle que soit l'imbrication.
@RenderBody
fonctionne comme un espace réservé permettant au moteur de savoir où déposer le contenu de la vue à l'aide de la page de présentation.
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>
<head>
Hey I'm actually on the _Main layout.
</head>
<div id="Index Content Here">
</div>
</div>
Les sections peuvent être rendues facultatives en les rendant avec required: false
@RenderSection("SectionName", required: false)
Essayez d'inclure la section dans la dernière vue.
@{
Layout = "~/Views/Shared/_Main.cshtml";
}
@section something {
content
}
UPDATE: OK, j'ai oublié de dire qu'il faut aussi écrire @RenderSection dans la disposition principale
@section something {
Hey I'm actually on the _Main layout.
@RenderSection("something", required:false)
}
enter code here