46 votes

Comment voulez-vous saupoudrez-en ASP.Net MVC dans un Projet de Site Web?

J'ai un héritage (haha) ASP.Net Webforms Projet de Site Web dans Visual Studio 2008 SP1, que je voudrais introduire progressivement certains MVC d'une fonctionnalité.

La plupart des informations que je peux localiser sur la façon d'intégrer ASP.Net MVC avec les Formulaires web semble supposer l'utilisation d'un Projet d'Application Web. Toutefois, il semble impossible de trouver des informations sur la façon de rénover une ASP.net Projet de Site Web avec le ASP.Net MVC fonctionnalités.

J'ai passé en revue Scott, Hanselman post et le Chapitre 13 de son livre à venir, les deux qui suppose le Projet d'Application Web type.

Est-ce possible? Quelqu'un aurait-il un mode d'emploi sur cette?

24voto

Kyle LeNeau Points 684

Eh bien pour commencer l'ajout de MVC pour un webforms projet est assez simple, pour obtenir les caractéristiques de VS 2008 pour MVC prend un peu plus de travail (encore plus facile). D'abord, vous voulez être sûr que vous de référence pour les assemblées et les utilisent .Net 3.5. Deuxièmement, vous pouvez créer un dossier contrôleurs et les vues de dossier dans votre site web actuel projet de formulaires. Vous pouvez également créer un contrôleur simple avec un indice d'action. Puis configuration/configurer les routes dans le monde.fichier ascx. Vous devez être définie à partir de là. Vérifiez ici pour référence.

Cependant, vous aurez seulement être en mesure de créer des pages aspx avec le code derrières (vous pouvez supprimer ceux et entrez le droit d'héritage de la classe dans le balisage). À fait "convertir" votre type de projet, de sorte que vous obtenez la bonté de MVC et visual studio (ajouter une nouvelle vue, goto contrôleur, etc) va prendre un certain jouer avec. Mon meilleur conseil est de créer un nouveau projet MVC dans VS 2008 et une nouvelle Application Web de projet et de comparer les .csproj fichiers en texte brut. Il y a une longue chaîne de valeur qui indique VS le modèle de projet.

Croyez-moi, cela fonctionne. Je l'ai fait sur mon propre héritage projets. Je ne me souviens pas comment j'ai trouvé le type de projet "clé" en plus de l'essai/erreur/d'élimination. ASP.Net MVC ne jouer gentil dans le même projet que webforms.

Mise à JOUR: je pense que vous pouvez changer pour un MVC type de projet, qui est encore une application web à l'aide de ces dans le PropertyGroup de la .fichier csproj. Comparer à ce que vous avez et changer celui qui sont différentes, assurez-vous de copier/sauvegarder le fichier.

<ProjectGuid>{B99EC98A-1F09-4245-B00D-5AF985190AA9}</ProjectGuid>
<ProjectTypeGuids>{603c0e0b-db56-11dc-be95-000d561079b0};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

Mise à jour 2: Vous n'auriez pas d'incidence sur votre projet ou de l'impact, il est très bien. Si vous êtes un de facile-il faire une sauvegarde et de jouer. Si vous rencontrez des changements que vous aurez toujours une copie de sauvegarde. J'étais sceptique au début, mais il était heureux je suis allé en bas de la MVC chemin.

19voto

Jason Points 1948

Je pensais faire une mise à jour de la réponse à l'aide de Visual Studio 2010 SP1 / NuGet / Scott, Hanselman est totalement non prise en charge de l'utilitaire.

  1. Installer MVC3 (w/ nuget) http://www.asp.net/mvc/mvc3
  2. Allez à "Outils" du menu de Visual Studio et sélectionnez "Gestionnaire de paquets de Bibliothèque" \ "Gestionnaire de paquets de la Console"
  3. Une fois la fenêtre de console s'affiche, modifiez le "Projet par Défaut" à votre webforms projet.
  4. Tapez "Install-Package AddMvc3ToWebForms" (http://nuget.org/List/Packages/AddMvc3ToWebForms)

Cela va ajouter de tout le nécessaire de dll, les fichiers javascript, web.paramètre de configuration, etc pour le projet. Si tout a été couronnée de succès, vous devriez être en mesure d'appuyer sur la touche F5, accédez à la "maison" sur votre site web et voir un exemple de formulaire rendus par mvc: "Bienvenue à ASP.NET MVC, mis à jour avec un package NuGet dans un cadre totalement non pris en charge de manière par de, Hanselman! Aucune garantie!".

7voto

Mark Brackett Points 46824

Pour un projet de Site web, vous avez juste besoin d'ajouter des Contrôleurs à App_Code, pas la racine. Vous manquerez des VS bonté - car il ne sait pas que vous êtes en utilisant MVC sans le fichier csproj, mais vous aurez vraiment obtenir ce travail.

Rappelez-vous juste d'hériter de Contrôleur et de ViewPage et vous devriez être bon.

6voto

Peter Hahndorf Points 1086

J'ai eu un assez gros ASP.NET site web (pas d'une application web) et je voulais ajouter MVC3. Je n'avais pas d'option pour changer le type de projet, j'ai donc dû aller avec le site web asp.net 4.0).

Je utiliser un autre projet MVC, mais pas tant que c'est propre application web, mais comme un assemblage au sein de mon ancien site web.

Voici un récapitulatif de ce que j'ai fait:

  • J'ai créé un nouveau MVC3 application web dans Visual Studio 2010, j'ai utilisé le modèle vide et le moteur de vue Razor.
  • Je l'ai ajouté à la solution à mon site web.
  • J'ai changé le chemin de sortie pour le montage de la bin local répertoire le répertoire bin de mon site web.
  • J'ai enlevé le "Contenu" et "Scripts" dossiers de l'application MVC. Les deux le contenu et les scripts sont déjà une partie de mon site web et je peux référence de ces MVC "pages".
  • J'ai enlevé le Mondial.asax.* fichiers du projet. Je suis en utilisant le Global.asax dans le site web.
  • J'ai copié les "Vues" de dossiers et sous-dossiers sur le site web. Parce que ce sont des fichiers réels et ne fait pas partie de l'assemblée, ils ont à l'intérieur du site web pas le projet qui génère le MVC de l'assemblée.
  • À ce point je pouvais avoir supprimé les "Vues", le dossier du projet MVC mais c'est seulement dans ce type de projet que je reçois Visual Studio support pour l'ajout d'un nouveau point de vue. J'ai donc parfois créer une vue ici et sur le site web. Lors de la modification de la cshtml fichiers dans mon site web, je reçois toujours plein Intellisense.
  • Ajouté le Routage vers le site web. J'ai juste copié un peu de code à partir d'un MVC mondiale.asax dans le monde.asax de mon site web. Nous avons besoin de l'usage:

    using System.Web.Mvc;
    using System.Web.Routing;
    

Dans Application_Start nous avons besoin de:

    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

Puis ajouter l'habitude des méthodes de routage:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // your routes
    }

Ajoutez ensuite un peu de choses sur le web.config de votre site web. Dans le système.web sous la compilation, nous avons besoin les ensembles suivants:

     <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>

Au départ, j'ai également ajouté quelques MVC espace de noms pour le web.la configuration, mais il semble bien fonctionner sans eux.

Vous, maintenant, de créer de nouvelles voies dans le Mondial.asax du site web, puis ajouter une manette correspondante dans le projet MVC, puis retour au site web pour ajouter une vue. Si vous logique est tous dans une assemblée, et les points de vue et le routage est défini dans le site web.

Vous pouvez toujours effectuer le débogage dans les contrôleurs MVC en définissant des points de rupture, mais vous débogage en commençant par le site web.

Si vous utilisez le défaut suggéré route de la MVC:

        routes.MapRoute("Default", "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

un appel à www.mysite.com servira le contenu de la maison contrôleur/vue pas votre ancien par défaut.aspx page d'accueil, je viens donc de ne pas utiliser cette voie. Si vous avez des itinéraires de conflits avec des physiques de dossiers et de fichiers, l'utilisation de contraintes avec des expressions régulières sur les routes d'exclure de tels conflits.

Même si j'utilise les pages maîtres dans le site web, le html pour la page commune des parties est créé par le code dans une autre assemblée. Je pourrait simplement appeler les mêmes méthodes de mon _ViewStart.cshtml ou mon contrôleur de base.

Jusqu'à présent je n'ai vu aucun point négatif réel sur cette approche.

2voto

Chris Points 14136

Aussi longtemps que vous configurez le routage dans le web.configuration, configuration de l'arborescence nécessaire, et ajouter la bonne itinéraires mondiale.asax, vous pourriez théoriquement ajouter MVC articles à n'importe quel projet web. Autant que je sache, ce sont les seules conditions requises pour qu'il fonctionne.

Cependant, la combinaison des deux peut être un peu déroutant et difficile à maintenir, à long terme. Peut-être que vous pouvez déplacer toutes les formes de web contenu du site dans un sous-dossier pour le garder hors de la voie et de le garder le répertoire racine du site propre afin de réduire l'encombrement et rendre les choses plus claires.

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