Pour référence, j'ai réussi à accomplir cette tâche hier - ajouter MVC de la fonctionnalité existante de Formulaires web site web, c'est-à - donc pensé que je pourrais écrire dans le cas où il est utile à personne.
Les gens disent: "la meilleure façon est de réécrire votre application web forms comme MVC" mais il n'y a souvent aucun cas commercial en faveur de ce lorsque 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, il nous avait été demandé de mettre en œuvre une nouvelle fonction dans cette application, et avoir un développement en MVC sur d'autres projets, récemment j'ai voulu construire cette nouvelle fonction dans le MVC. C'est ce que j'ai fait:
Créer un nouveau ASP.NET MVC 4 Application et sélectionné le Modèle Vide (avec Rasoir)
Une fois chargé, clic droit, Références > Parcourir et navigué à la Corbeille le dossier de mon site web. J'ai ensuite ajouté dans la DLL, j'ai été en utilisant dans le site existant. Pour référence, je suis en utilisant AjaxControlToolkit donc décidé d'y ajouter plus tard un de NuGet. Cela devrait alors automatiquement mise à jour sur le web.fichier de configuration
J'ai ensuite ouvert l'Explorateur Windows et naviguez vers le dossier racine de mon site web. À l'aide de Visual Studio, j'ai ensuite copié le dossier de niveau supérieur de la structure du site existant (moins le dossier Bin) résultant dans les 2 sites ayant la même dossiers de niveau supérieur (mais le nouveau projet de la MVC App_Start, les Contrôleurs, les Modèles et les Vues des dossiers aussi, mais pas Bin évidemment).
Une fois le programme d'installation, j'ai copié les sous-dossiers et des fichiers à partir de la correspondante du dossier de niveau supérieur dans l'Explorateur Windows et collé dans la solution. Si vous le faites de la sorte, le projet permet de copier dans les sous-dossiers et le contenu directement, l'ajout d'un élément existant via visual studio, seulement des copies de fichiers ainsi gagner du temps. Veuillez noter: pour le dossier racine, je n'ai PAS de copie de site web.config ou Mondial.asax, copié, mais dans tous les autres fichiers (comme par défaut.aspx, etc)
Une fois que tout le contenu a été copié, j'ai ouvert web.config dans le nouveau projet et web.config dans le site existant. J'ai copié dans le nouveau site web.config quelque chose de spécifique sur le site existant (appSettings, connectionStrings, les espaces de noms, de membres, d'informations, etc). De même pour le Mondial.asax fichiers.
J'ai tenté de construire et de fixe, rien de ce que j'avais raté.
-
Une fois que tout était bon (et j'avais abattu un peu de Jaune d'écrans de la mort), j'ai remarqué que j'ai trouvé la page ne trouve pas d'erreur lors du chargement par défaut.aspx. Cela représente une baisse de routage, voici les modifications que j'ai apportées à l'Acheminement d'informations (situé dans le Mondial.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 a couru comme il l'a toujours fait, mais j'ai maintenant un ASP.NET WebForms et MVC hybride. 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 d'échec. De cette façon m'a pris environ 20 minutes et j'ai été en cours d'exécution... eh bien assis et codage :)