Combiner ASP.Net MVC avec les formulaires Web

serait-il possible de créer une application racine MVC (portail avec des pages maîtresses et des thèmes) et d'ajouter quelques sous-projets basés sur les formulaires Web (nous avons déjà une application WebForms existante que nous aimerions intégrer dans le portail)?

comment centraliser la navigation (sitemaps, routage d'url)?

Comment partageriez-vous les masterpages?

Comment voulez-vous référer à des ressources (~ etc.)?

Solutions comme celle décrite ici semblent quelque peu désuètes

40
demandé sur Zyphrax 2010-02-05 00:36:56

4 réponses

combiner des formulaires web avec MVC est tout à fait possible. Voir ce billet de Scott Hanselman pour une introduction.

41
répondu jeroenh 2017-05-23 12:03:05

pour référence j'ai réussi à accomplir cette tâche hier - ajouter la fonctionnalité MVC à un site Web existant de formulaires Web, c'est - à-dire-donc pensé que je voudrais écrire au cas où il est de toute utilité pour n'importe qui.

les gens disent:" la meilleure façon est de réécrire votre application de formulaires web en tant que MVC " mais il n'y a souvent pas d'analyse de rentabilisation pour cela quand l'application est bien établie et a grandi au fil du temps pour être tout à fait un monstre (qui fonctionne toujours bien, je pourrais ajouter). Dans mon cas, nous avions été quand on m'a demandé de mettre en place une nouvelle fonction dans cette application - et que J'avais développé récemment dans MVC sur d'autres projets - je voulais construire cette nouvelle fonction dans MVC. C'est ce que j'ai fait:

  1. créer un nouveau ASP.NET MVC 4 Application et a sélectionné le modèle vide (avec rasoir)

  2. une fois chargé, clic droit références > Parcourir et ensuite naviguer dans le dossier Bin de mon site Web existant. J'ai ensuite ajouté la DLL que j'utilisais dans le site existant. Pour référence, J'utilise AjaxControlToolkit donc décidé d'ajouter dans le dernier de NuGet. Cela devrait ensuite auto-mettre à jour le web.fichier de configuration

  3. j'ai alors ouvert Windows Explorer et navigué dans le dossier racine de mon site Web existant. En utilisant Visual Studio, Je réplique de la structure du dossier de haut niveau du site existant (moins le dossier Bin) résultant dans les 2 sites ayant les mêmes dossiers de haut niveau (mais le nouveau projet ayant le MVC App_Start, contrôleurs, modèles et vues dossiers aussi, mais pas Bin évidemment).

  4. une fois la configuration terminée, j'ai copié les sous-dossiers et les fichiers du dossier de premier niveau correspondant dans Windows Explorer et je les ai collés dans le solution. Si vous le faites à la manière, le projet vous permet de copier dans les sous-dossiers et le contenu directement, en ajoutant l'élément existant via visual studio seulement des copies dans les fichiers, ce qui permet de gagner du temps. S'il vous plaît noter: pour le dossier racine, j'ai fait pas copie dans web.config ou Global.asax , mais copié dans tous les autres fichiers (comme par défaut.aspx, etc)

  5. une fois que tout le contenu a été copié, j'ai ouvert le web.config le nouveau projet et web.config dans le site existant. J'ai copié sur le nouveau web.config tout ce qui est spécifique au site Web existant (appSettings, connectionsstrings, namespaces, membership info, etc.). De même pour le Mondial.fichiers asax.

  6. j'ai tenté une construction et réparé tout ce que j'avais manqué.

  7. une fois que tout était en ordre (et j'avais abattu quelques écrans jaunes de la mort) j'ai remarqué que j'ai eu le page non trouvée erreur lors du chargement de par défaut.aspx . Il s'agit du routage, voici les modifications que j'ai apportées aux informations de routage (situé dans Global.ascx MVC 3, ou App_Start > RouteConfig.cs MVC 4):

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        // This informs MVC Routing Engine to send any requests for .aspx page to the WebForms engine
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx");
    
        // Important change here: removed 'controller = "Home"' from defaults. This is the key for loading
        // root default page. With default setting removed '/' is NOT matched, so default.aspx will load instead
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { action = "Index", id = UrlParameter.Optional }
        );
    }
    

avec toutes ces mesures prises, le site chargé et couru comme il l'a toujours fait, mais j'ai maintenant un ASP.NET WebForms et MVC hybrid. Je suis sûr qu'il ya probablement plus facile façons d'accomplir cette tâche, mais j'ai essayé d'autres méthodes et il a échoué. De cette façon m'a pris environ 20 minutes et j'ai été en cours d'exécution... code de bonne conduite:)

18
répondu Matt 2014-05-01 09:44:47

grande réponse ci-dessus. L'autre chose que vous pourriez considérer est la migration de ASP.NET pour ASP.NET MVC, dans ce cas ce post pourrait vous aider migrer les fichiers de projet.

5
répondu Odd 2010-02-04 23:21:06

j'étais trop coincé dans cette situation, après tout j'ai eu une solution qui a fonctionné, d'abord copier web.config dans votre dossier Vues.

après cet ouvrir le fichier Route.config(Routeconfig) , vous trouverez une méthode RegisterRoutes , la garder telle quelle et créer une autre méthode appelée RegisterRoutes2() , et copier coller le code de méthode ci-dessous à partir de l'application mvc:

public static void RegisterRoutes2(RouteCollection routes)
{...}

dans certains cas, le nom de la méthode dans l'application mvc serait Registrerroutes. Si ci-dessus le code ne fonctionne pas, Copiez le coller à partir de l'application mvc de votre machine. Ensuite, allez dans le fichier global.asax , vous trouverez que RegisterRoutes() a été appelé , simple maintenant, aussi appeler RegisterRoutes2() . Et vous avez terminé, redémarrez votre application, ou nettoyez la construction, elle s'exécute.

0
répondu Hitesh Nagpal 2016-12-21 19:14:17