2012-10-09 1 views
5

J'ai récemment rejoint un groupe qui gère une application Web ASP classique. Cela a bien fonctionné pour les besoins de notre groupe. Cependant, il a été décidé, avant de me joindre, de passer à ASP .Net. Puisque nous sommes principalement des développeurs ASP, nous écrivons du code dans ASP .Net comme nous le ferions dans ASP classique (pour la plupart). Serait-il possible d'introduire MVC dans cette application/projet?L'infrastructure MVC peut-elle être utilisée dans une application Web qui utilise actuellement ASP .NET?

Merci!

Répondre

2

Oui, il est possible d'utiliser MVC dans un projet WebForms traditionnel. Je migré un grand projet WebForms MVC 2 il y a quelques années, et voici mes conclusions (je les ai mis à jour pour refléter MVC 3)

  1. Assurez-vous de .NET 4.0 installé, ainsi que le MVC 3 framework et extensions VS.
  2. Créez un nouveau projet MVC vide à utiliser comme référence.
  3. Examinez le fichier web.config par défaut du projet de référence. Vous voulez essentiellement utiliser la référence web.config, et fusionner dans les choses dont vous avez besoin de votre projet actuel.
  4. Regardez la référence global.asax.cs. Similaire à ce qui précède, vous souhaitez fusionner les modifications dans le fichier de référence .cs dans le fichier global.asax.cs de votre application actuelle.
  5. Vous devez ajouter les références suivantes à votre projet web:

    System.Web.Abstractions, System.Web.Extensions, System.Web.Helpers, System.Web.Mvc, système .Web.Routage

  6. Vous pouvez activer les extensions VS en changeant les ProjectTypeGuids:

    • Dans l'Explorateur de solutions, cliquez droit sur le nom du projet et sélectionnez Projet Décharger. Ensuite, cliquez avec le bouton droit sur le nom du projet et sélectionnez Modifier ProjectName.csproj.
    • Recherchez l'élément ProjectTypeGuids et ajoutez {E53F8FEA-EAE0-44A6-8774-FFD645390401}.
    • Enregistrez les modifications, cliquez avec le bouton droit sur le projet, puis sélectionnez Recharger le projet.
  7. Ajouter les dossiers standards suivants pour le contenu MVC:

    • ~/Vues
    • ~/Vues/shared
    • ~/Contrôleurs
    • ~/Modèles (pour vos modèles de vue , optionnel)
    • ~/Contenu (pour CSS et images, optionnel)
    • ~/Scripts (pour JS, optionnel)

Notes complémentaires:

  1. Si vos WebForms existants repose sur les paramètres web.config d'autorisation (par exemple empêcher les utilisateurs non autorisés), ce ne sera pas reconnu par des actions MVC, parce que Le routage fonctionne complètement séparément de l'autorisation WebForms. Utilisez AuthorizeAttribute pour exiger une autorisation ou contraindre des actions à certains rôles ou utilisateurs. Vous pouvez même specify global filters pour que vous n'ayez pas à appliquer cet attribut à chaque contrôleur ou action.
  2. Il peut y avoir d'autres considérations pour que MVC fonctionne avec les versions IIS antérieures à 7 ou avec les pools d'applications qui utilisent le pipeline Classic. Envisagez d'utiliser IIS 7+ avec Integrated Pipeline. Mes notes ci-dessus impliquent principalement obtenir la base de travail MVC, qui utilise des vues ASPX. Les vues ASPX utilisent le même balisage que les fichiers ASPX auxquels vous êtes habitué dans WebForms. Vous pouvez également utiliser la nouvelle syntaxe Razor (primer), que je recommande fortement. Vous pouvez utiliser à la fois les pages d'affichage ASPX et Razor en même temps. Toutefois, vous ne pouvez pas utiliser une page maître ASPX dans une vue Razor (ou vice versa). En outre, MVC trouvera et utilisera des vues ASPX avant les vues Razor. Par conséquent, si vous mettez à niveau une vue vers Razor, supprimez l'ASPX d'origine. Vous aurez besoin de faire un peu de travail supplémentaire pour activer les vues Razor. J'essaie de trouver mes notes pour activer Razor. Je mettrai à jour quand je les trouverai. Une fois que Razor est installé et fonctionne, vous pouvez utiliser this tool by Telerik pour convertir ASPX en Razor.
  3. Here is a question sur SO à propos d'un problème que j'avais eu lors de la mise à niveau. Je ne fais que le fournir parce qu'il couvre certains des points que j'ai mentionnés plus haut. Cependant, je passais à MVC 2 à l'époque, donc certaines de ces choses sont périmées.
+0

Cette réponse ne mentionne pas Routage; Je soupçonne que les routes MVC par défaut vont interférer avec la disponibilité de la plupart des pages ASP.Net normales. –

+0

@ChrisMoschini MVC cherchera à voir si la ressource demandée correspond à un fichier physique, et si c'est le cas, ce fichier est traité en fonction de son gestionnaire. Donc, en termes de pages .ASPX, ce n'est pas un problème. Cependant, vous devrez résoudre tous les problèmes où vous avez une URL routable vers MVC et également un ou plusieurs autres gestionnaires.Pour votre projet WebForms moyen, ce n'est pas très commun, mais c'est possible. Exemple: disons que vous avez un document par défaut .ASPX mais que vous voulez que MVC prenne le relais. Vous devrez soit A) Changer le document par défaut afin que le .ASPX ne soit plus considéré ou B) supprimer l'ASPX – HackedByChinese

2

La réponse courte est oui c'est possible.

Scott Hanselman a écrit environ this topic avant. En fonction des compétences de votre équipe, vous pouvez avoir du mal à vous mettre au niveau - il est possible d'écrire du code de style MVC propre à Classic ASP mais la plupart des gens ne le font pas.

1

C'est techniquement possible. Cependant, il semble que ce serait un choc culturel, car MVC fonctionne un peu différemment de Classic ASP ou ASP.NET WebForms. Je pense qu'il serait utile de le faire - ou simplement coller avec ASP.NET WebForms si cela semble plus naturel. Mais si vous ne vous êtes pas encore totalement engagé sur WebForms, MVC semble tout aussi facile à utiliser, IMO.

1

Oui. J'ai travaillé sur un projet qui a commencé comme simple ASP.NET et plus tard ajouté quelques pages ASP.NET MVC. Finalement, nous avons tellement aimé MVC que nous avons finalement migré toutes nos pages WebForms pour utiliser MVC à la place. Mais tout le temps, les deux systèmes ont très bien fonctionné ensemble.

Voici la seule vraie erreur dont je me souvienne: WebForms fonctionne en faisant en sorte que toute la page soit entourée d'une grande balise <form>. Étant donné que le code HTML ne vous permet pas d'avoir des balises <form> imbriquées, vous ne pouvez généralement pas utiliser les formulaires MVC dans une page WebForms. Gardez vos pages WebForms séparées de votre contenu MVC, évitez d'utiliser des formulaires HTML dans le contenu MVC qui peuvent apparaître sur une page WebForms, ou utilisez des boîtes de dialogue contextuelles pour vos formulaires créés en dehors de la zone DOM WebForms.

Questions connexes