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