J'utilise _viewstart.cshtml pour attribuer automatiquement la même disposition de rasoir à 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 partielles de Razor , car elles exécutent le contenu de _viewstart.cshtml et s'attribuent donc incorrectement une mise en page, ce qui les rend, euh, non partielles.
Voici un projet hypothétique, montrant le fichier _viewstart.cshtml, le fichier _layout.shtml partagé et une vue partielle ("AnonBar.cshtml").
Actuellement, la façon dont je contourne ce problème consiste à ajouter la ligne suivante à chaque vue partielle:
@{
Layout = "";
}
Cela semble être la mauvaise façon 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.)
D'autres options que j'ai envisagées mais qui sont encore pires:
- Mettre toutes les vues partielles dans un dossier commun, afin qu'elles puissent partager un _viewstart.cshtml commun. Cela rompt la convention des vues étant dans le même dossier que leur contrôleur.
- Ne pas utiliser de vues partielles.
Est-ce quelque chose qui est encore en cours d'élaboration par l'équipe Razor View Engine, ou est-ce que je manque un concept fondamental?
la source
Réponses:
Si vous
return PartialView()
de vos contrôleurs (au lieu dereturn View()
), alors_viewstart.cshtml
ne sera pas exécuté.la source
PartialViewResult
classe. C'était ce dont j'avais besoin.PartialViewResult
lieu de l'habituelActionResult
.ActionResult
? Je suis surpris que ce soit un problème car le runtime MVC ne devrait pas se comporter différemment dans ce cas (c'est-à-dire tant que le type renvoyé par la méthode d'action estActionResult
ou toute classe dérivée de celle-ci, les choses devraient simplement fonctionner).ActionResult
. Fonctionne bien si le type de retour estPartialViewResult
. Vous pensez avoir besoin de signaler un bogue Connect?