Comment spécifier l'emplacement de vue dans asp.net core mvc lorsque vous utilisez des emplacements personnalisés?
Disons que j'ai un contrôleur qui utilise l'attribut en fonction de routage pour gérer l'url demandée de /admin/produit:
[Route("admin/[controller]")]
public class ProductController: Controller {
//GET: /admin/product
[Route("")]
public IActionResult Index() {
return View();
}
}
Maintenant, disons que j'aimerais bien garder mon point de vue, organisés dans une structure de dossier qui reflète à peu près les chemins d'url elles sont reliées. J'aimerais que la vue de ce contrôleur pour être situé ici:
/Views/Admin/Product.cshtml
Pour aller plus loin, si j'avais un contrôleur comme ceci:
[Route("admin/marketing/[controller]")]
public class PromoCodeListController: Controller {
//GET: /admin/marketing/promocodelist
[Route("")]
public IActionResult Index() {
return View();
}
}
Je voudrais le cadre de chercher automatiquement c'est ici:
Views/Admin/Marketing/PromoCodeList.cshtml
Idéalement, l'approche pour informer le cadre de la vue lieu de travail, de manière générale, basée sur l'attribut de l'itinéraire sur l'information quel que soit le nombre d'url secteurs sont concernés (ie. comment profondément imbriqués qu'il est).
Comment puis-je charger le Cœur framework MVC (je suis actuellement en utilisant RC1) pour rechercher le contrôleur de la vue dans un tel lieu?
source d'informationauteur Ron C
Vous devez vous connecter pour publier un commentaire.
Une autre solution pour cela est d'élargir les lieux que le point de vue du moteur de recherche des vues sans avoir besoin de créer une vue personnalisée du moteur. Pour cette approche, vous procédez de la manière suivante:
Puis dans le
ConfigureServices(IServiceCollection services)
à la méthode de démarrage.cs fichier, ajoutez le code suivant pour enregistrer avec le conteneur IoC. Faire de ce droit, aprèsservices.AddMvc();
Bam! Maintenant, vous avez une façon d'ajouter de la coutume structure de répertoire que vous voulez la liste des endroits où le point de vue du moteur de recherche des vues et des vues partielles. Il suffit de l'ajouter à la
locations
string[]
. Aussi, vous pouvez placer un_ViewImports.cshtml
fichier dans le même répertoire ou un répertoire parent et il sera trouvé et l'a fusionné avec votre point de vue situé dans cette nouvelle structure de répertoire. Assez cool.Une grande nouvelle... ASP.NET Core 2 (EDIT: confirmé travailler en 2.1), vous n'avez pas besoin d'un custom ViewEngine ou même ExpandViewLocations plus.
En démarrage.cs, dans ConfigureServices, vous pouvez ajouter quelque chose comme cela, que j'ai utilisé pour mettre en œuvre la Fonctionnalité de la Structure de Dossier (je préfèrent largement sur les conventions par défaut):
Et c'est tout! Pas de classes spéciales requises.
Bonus astuce: si vous utilisez resharper, vous remarquerez peut-être que dans certains endroits, Resharper ne trouvez pas votre point de vue et vous donne des avertissements ennuyeux. Pour contourner cela, tirez dans le Resharper.Annotations et de package de démarrage.cs (ou ailleurs), ajoutez l'un de ces attributs pour chacun de vos emplacements:
Espérons que cela permet de préserver une partie des gens les heures de frustration que j'ai vécu. 🙂
.net core, vous pouvez spécifier le chemin d'accès complet de la vue.
return View("~/Views/booking/checkout.cshtml", checkoutRequest);
Vous allez avoir besoin d'un custom
RazorviewEngine
pour celui-ci.Tout d'abord, le moteur:
Cela va créer un autre format, ce qui correspond au cas d'utilisation de
{areaName}/{controller}/{view}
.Deuxième, inscrire le moteur dans le
ConfigureServices
méthode de laStartup.cs
classe:Troisièmement, ajouter de la zone de routage de votre MVC routes, dans les
Configure
méthode:Enfin, changez votre
ProductController
classe pour utiliser leAreaAttribute
:Maintenant, votre application peut ressembler à ceci: