1

J'ai configuré mon site MVC 5 par catégorie, puis contrôleur, modèle, afficher sous-dossiers dans chaque catégorie, à savoir les dossiers de dossier racine \ Home et \ Products aurait ces trois sous -folders ainsi qu'un dossier racine \ Shared \ Views. J'ai suivi un article formidable mon Matthew Renz, Clean Architecture in ASP.NET MVC 5. Fait en partie par la création d'un RazorViewEngine personnalisé, plus précisément:ASP.NET MVC 5 personnalisé RazorViewEngine pour une structure de portail multiple

public CustomRazorViewEngine() 
    { 
     ViewLocationFormats = new string[] 
     { 
      "~/{1}/Views/{0}.cshtml", 
     }; 

     PartialViewLocationFormats = new string[] 
     { 
      "~/Shared/Views/{0}.cshtml" 
     }; 
    } 

Il n'y a pas beaucoup de changements au-delà. Je me demandais si je pouvais construire sur cette idée et configurer un projet de site Web avec un dossier racine \ Portals et des sous-dossiers pour chaque portail en utilisant un identifiant (nom ou numéro) - similaire à DNN. Les modifications apportées à la vue du code du moteur de rasoir personnalisé peut regarder un peu comme:

public CustomRazorViewEngine() 
    { 
     ViewLocationFormats = new string[] 
     { 
      "~/Portals/{2}/{1}/Views/{0}.cshtml", 
     }; 

     PartialViewLocationFormats = new string[] 
     { 
      "~/Portals/{2}/Shared/Views/{0}.cshtml" 
     }; 
    } 

Je ne sais pas où les valeurs {0} et {1} viennent, cependant. Je pourrais trouver un moyen d'obtenir {2}, le nom du site du portail. Les chemins relatifs pour le reste du site, tels que \ Content, \ Scripts, etc. Je crois que je pourrais me structurer.

Le but de cette approche est de fournir au client une solution dans laquelle le code commun peut être réutilisé pour prendre en charge un certain nombre de portails dotés d'habillages et de fonctions uniques. Merci pour votre temps et considération et laissez-moi savoir si vous avez des questions.

John

Répondre

1

Ce sont des espaces réservés dans la chaîne qui peut être utilisé pour mettre le nom de la zone, le nom du contrôleur ou le nom d'action dans la chaîne par le contrôleur. {2} est la zone, {1} est le contrôleur, {0} est l'action. Vous pouvez également être intéressé de savoir que lorsque vous utilisez Asp.Net Core, il est facile d'obtenir le moteur Razor View standard pour localiser des vues et autres dans des emplacements personnalisés via un ViewLocationExpander plutôt que de créer un nouveau moteur de vue héritant de le moteur de vue Razor. Je ne le mentionne que parce que vous avez ajouté le tag asp.net-core-mvc sur votre question.

Voici une réponse de débordement de pile qui montre comment: How to specify the view location in asp.net core mvc when using custom locations?

+0

Merci Ron! Je pensais que Core aurait quelque chose en plus de zones. Je vais devoir lire sur les zones comme cela a été un moment. Dans cette convention sur la configuration, les zones signifient peut-être plus que des mots arbitraires, c'est-à-dire des portails. Je voudrais garder cela ouvert pour voir si d'autres ont fait ce w/o zones et non avec View ("somepathtotheview.cshtml", modèle), etc –

+1

Na, ils ont à peu près apporté le concept de la région vers l'avant. Mais le noyau Asp.Net est super configurable, donc vous pouvez vraiment structurer votre projet comme vous le souhaitez si vous choisissez d'implémenter de nouvelles conventions pour votre projet. –