35 votes

Comment créer mon propre modèle Scaffold dans ASP.NET MVC 3 ?

ASP.NET MVC fournit la possibilité de sélectionner un 'modèle d'échafaudage' sur lequel une vue nouvellement créée sera basée (Ajouter une vue > Créer une vue fortement typée > Modèle d'échafaudage).

Est-il possible de créer votre propre modèle d'échafaudage? Et si oui, comment?

33voto

Darin Dimitrov Points 528142

ASP.NET MVC utilise des modèles T4. Voici un aperçu.

Voici les étapes :

  1. Dans la console du gestionnaire de packages, tapez : install-package mvc3codetemplatescsharp
  2. Acceptez tous les avertissements
  3. Le dossier CodeTemplates sera ajouté à votre projet contenant les modèles

À partir de là, vous pouvez soit modifier les modèles existants, soit en ajouter de nouveaux.

Ou si vous souhaitez modifier ceux-ci globalement, vous pouvez le faire dans le dossier C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates\.

11voto

Francis Shanahan Points 1590

Vous pouvez utiliser T4 sans nuget bien sûr : Placez un dossier à la racine du site web de l'application (le projet contenant les vues). La structure du répertoire est importante, donc il devrait être

\CodeTemplates\AddView\AspxCsharp\MyTemplate.tt

Vous pouvez copier le contenu de l'un des gabarits existants situés dans C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates\

Ensuite, effacez la propriété sur le fichier TT nommé "Custom Tool". Cela devrait être vide.

Ensuite, cliquez avec le bouton droit sur n'importe quelle action du contrôleur et sélectionnez "Ajouter une vue" ou, puisque les contrôleurs se trouvent dans un projet séparé dans notre cas, cliquez avec le bouton droit sur le dossier Vue et sélectionnez "Ajouter une vue".

Dans le menu déroulant, sélectionnez "Créer une vue fortement typée", puis saisissez le type à utiliser sous "Classe de données de la vue :"

Enfin, dans le menu déroulant "Contenu de la vue", sélectionnez "MyTempate". Cela devrait s'afficher si vous avez saisi les dossiers correctement.

4voto

Chris Moschini Points 7278

Dans Visual Studio 2012 avec MVC 4, la méthode simple (installer le package Nuget) vous donne une configuration incomplète, car le package Nuget est lamentablement obsolète (dernière mise à jour en 2011 - peut-être le jour de sa création).

Vous devez utiliser l'équivalent de la réponse de Francis Shanahan, mais au lieu du chemin à copier (64 bits) :

C:\Program Files (x86)\Microsoft Visual Studio\11.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 4\CodeTemplates

Vous :

  1. Ajoutez une référence à Microsoft.Web.Infrastructure, que vous pouvez trouver dans Assemblies > Extensions.

  2. Copiez ce dossier CodeTemplates (y compris le dossier lui-même) à la racine de votre projet et incluez-le dans le projet

  3. Ignorez les erreurs du compilateur pour le moment (comme ne peut pas trouver MvcTextTemplateHost)

  4. Parcourez les propriétés de chacun des fichiers ajoutés et supprimez le texte dans la propriété "Outil personnalisé" de chaque fichier. Lorsque vous le faites, la flèche d'expansion à côté de chaque fichier disparaîtra (car le fichier ne sera plus généré sur place)

  5. Enregistrez tout et compilez - les erreurs du compilateur ont disparu

Si les erreurs du compilateur ne disparaissent pas - surtout si vous voyez une erreur dans un fichier .cs généré que Visual Studio ne peut pas trouver, et un fichier .tt - fermez Visual Studio, nettoyez votre dossier temporaire et rouvrez la solution. Dans un cas, je suis allé jusqu'à redémarrer avant que le problème ne se résolve. C'était causé par un fichier .cs généré à partir d'un modèle .tt que Visual Studio essayait toujours de générer automatiquement du code pour.

De plus, les noms des fichiers .tt sont un peu confus - voici comment ils se mappent :

GUI :

Contrôleur MVC vide
Contrôleur MVC avec actions de lecture/écriture et vues, utilisant Entity Framework
Contrôleur MVC avec des actions de lecture/écriture vides
Contrôleur API vide
Contrôleur API avec des actions de lecture/écriture, utilisant Entity Framework
Contrôleur API avec des actions de lecture/écriture vides

Les fichiers de CodeTemplates\AddController se mappent respectivement :

Controller.tt
ControllerWithContext.tt
Controller.tt
ApiController.tt
ApiControllerWithContext.tt
ApiController.tt

Il y a une instruction if dans Controller.tt et ApiController.tt qui gère la fonctionnalité avec/sans actions de lecture/écriture.

Pour les vues, le nommage est intuitif sauf que List.tt crée Index.cshtml, et Empty.tt est utilisé pour toute vue autre que Create/Delete/Details/Edit/Index.

Cette question couvre les propriétés que vous pouvez utiliser dans les modèles .tt.

Les modèles .tt sont des modèles Microsoft T4. Syntaxe des modèles T4.

2voto

Patrick Points 21

Ou, pour Visual Web Developer Express sur un système 32 bits, un autre emplacement pour ces fichiers est C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\VWDExpress\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates

0voto

Alex Points 3871

Cet article MSDN discute du Scaffolding et des modèles de page : http://msdn.microsoft.com/en-us/library/cc488540.aspx

Qui, à son tour, renvoie à l'article suivant pour la modification des modèles : http://msdn.microsoft.com/en-us/library/cc488537.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X