web-dev-qa-db-fra.com

Comment utiliser correctement _viewstart.cshtml et des vues partielles de Razor?

J'utilise _ viewstart.cshtml pour attribuer automatiquement la même mise en page Razor à mes vues.

C'est un fichier simple mort à la racine de mon dossier Views qui ressemble à ceci:

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

C’est plus DRY que d’ajouter la directive @Layout à chaque vue.

Cependant, cela pose un problème pour les vues Razor partial, car elles exécutent le contenu de _viewstart.cshtml et s’assignent donc incorrectement une mise en page, ce qui les rend, euh, non plus partielles.

Voici un projet hypothétique montrant le fichier _viewstart.cshtml, le fichier partagé _layout.shtml et une vue partielle ("AnonBar.cshtml").

Example project structure

Actuellement, la solution consiste à ajouter la ligne suivante à chaque vue partielle:

@{
    Layout = "";
}

Cela semble être le mauvais moyen de désigner une vue comme partielle dans Razor. (Notez que contrairement au moteur d'affichage des formulaires Web, l'extension de fichier est la même pour les vues partielles.)

J'ai envisagé d'autres options, mais elles sont encore pires:

  • Placer toutes les vues partielles dans un dossier commun afin qu'elles puissent partager un fichier _viewstart.cshtml commun. Cela rompt la convention des vues se trouvant dans le même dossier que leur contrôleur.
  • Ne pas utiliser des vues partielles.

Est-ce quelque chose que l'équipe du moteur de visualisation Razor est en train d'étoffer ou est-ce qu'il me manque un concept fondamental?

155
Portman

Si vous return PartialView() à partir de vos contrôleurs (au lieu de return View()), alors _viewstart.cshtml ne sera pas exécuté.

234
marcind