web-dev-qa-db-fra.com

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

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?

20
ocanal

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.

23
Raciel R.

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 suit:

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

Les sections peuvent être rendues facultatives en les rendant avec required: false

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

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