Pourquoi mon .cshtml page nécessité de définir le contenu?
Disons que j'ai la structure suivante dans mon ASP.NET MVC 3.
- Éléments
- Index.cshtml
- Catégories
- Partagé
- _Index.cshtml
- _Site.cshtml
- Index.cshtml
Les deux Index.cshtml
l'utilisation des fichiers _Index.cshtml
que la mise en page et _Index
est imbriqué dans le _Site
mise en page.
Items/Index
met en œuvre les sections facultatives définies dans _Index
. Shared/Index
est vide.
La Items/Index
view fonctionne bien. Étant donné que les Catégories n'ont pas un Indice, il utilise celui dans le dossier Partagé. Cela ne fonctionne pas.
Il jette l'erreur
La "RenderBody" la méthode n'a pas été appelé pour la mise en page "~/Views/Shared/_Index.cshtml".
Si _Site
appels RenderBody
, et _Index
hérite de _Site
, n'est-ce pas le contenu dans _Index
satisfaire la nécessaire RenderBody
appel et Shared/Index.cshtml
peut être vide?
La raison pour laquelle je demande parce que j'ai un ASP.NET MVC 1 application mis en œuvre cette structure à l'aide de pages Maîtres et il a bien fonctionné, mais en la convertissant en MVC 3 avec le Rasoir est à l'origine de ce problème.
Ici est le plan de base de ce que je suis en décrivant:
_Site.cshtml
<!DOCTYPE html>
//head
<body>
@RenderBody()
</body>
_Index.cshtml
@{
Layout = "~/Views/Shared/_Site.cshtml";
}
<div id="sub-menu">
//Markup
</div>
//More markup
@RenderSection("SectionOne", required: false)
@RenderSection("SectionTwo", required: false)
Articles/Index.cshtml (de Travail)
@{
Layout = "~/Views/Shared/_Index.cshtml";
}
@section SectionOne {
//Markup
}
Partagé/Index.cshtml (RenderBody erreur)
@{
Layout = "~/Views/Shared/_Index.cshtml";
}
//Rest of this file is empty
OriginalL'auteur Brandon | 2011-11-18
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr que je vous suis complètement, mais TOUS les pages doivent avoir un
RenderBody()
, même si elles sont imbriquées.RenderBody()
rend le contenu pour "enfant". Lorsque vous avez imbriqué mise en page des pages imbriquées mise en page est l'enfant de la mère, et c'est la sortie doit être rendu dans le RenderBody. De même, l'enfant de l'enfant doit rendre son corps dans le milieu de la page.Pour le dire d'une autre façon, tout ce qui n'est pas dans un @article est considéré comme le "corps". Donc, _Index.cshtml doit rendre son corps (de l'Index.cshtml) et _Site.html a pour le rendu du corps (_Index.cshtml). Il va jusqu'à la chaîne.
EDIT:
Il apparaît que la disposition doit rendre au moins une section, avec une
RenderBody()
ou unRenderSection()
. Bien qu'il soit vrai que les sections sont en option, rendu au moins une section n'est pas. Ajouter une section vide de votre Index.cshtml ou ajouter un RenderBody() à votre _Index.cshtml.Peut-être il serait utile si vous inclus de base cshtml code illustrant, parce que je ne comprends pas ce que vous décrivez.
mise à jour de question. Peut-être que je ne suis pas la mise en œuvre de imbriqués les pages correctement, mais c'est fondamentalement la structure de celle-ci.
Bien, il semble que il doit y avoir au moins rendu d'un article, d'un organisme ou d'une section. Vous pouvez simplement inclure une section vide dans votre autre indice.
c'est ce que j'ai fait. Je me demande pourquoi je serais forcé de mettre en œuvre une section optionnelle dans ce cas. Si c'est juste parce que je n'ai pas de Corps, et il veut quelque chose pour rendre les, ajoutez-le à votre réponse et je vais accepter. Merci.
OriginalL'auteur