Als Referenz habe ich gestern diese Aufgabe erledigt - fügen MVC-Funktionalität zu einer bestehenden WebForms-Website, das heißt - so dachte ich, würde ich schreiben, falls es für irgendjemanden von Nutzen ist.
Die Leute sagen: "Der beste Weg ist, Ihre Webformular-Anwendung als MVC neu zu schreiben", aber es gibt oft keinen Geschäftsfall dafür, wenn die Anwendung gut etabliert ist und im Laufe der Zeit zu einem Monster wurde (das funktioniert immer noch) Nun, ich könnte hinzufügen). In meinem Fall, wir wurden gebeten, eine neue Funktion in diese Anwendung zu implementieren - und in MVC in anderen Projekten in letzter Zeit entwickelt - wollte ich diese neue Funktion in MVC erstellen. Das ist, was ich tat:
Erstellen Ihnen eine neue ASP.NET MVC 4 Anwendung und ausgewählt, um die Leere Vorlage (mit Razor)
Nach Rechtsklick geladen, Referenzen> Durchsuchen und navigieren Sie dann zum Ordner Bin meiner bestehenden Website. Ich fügte dann die DLLs hinzu, die ich in der vorhandenen Site verwendete. Als Referenz verwende ich AjaxControlToolkit, also habe ich beschlossen, das neueste von NuGet hinzuzufügen. Dies sollte dann automatisch die Datei web.config
aktualisieren Ich öffnete dann Windows Explorer und navigierte zum Stammordner meiner bestehenden Website. Unter Verwendung von Visual Studio replizierte ich dann die Top-Level-Ordnerstruktur der vorhandenen Site (abzüglich des Ordners Bin), was dazu führte, dass die 2 Sites die gleichen übergeordneten Ordner hatten (aber das neue Projekt MVC App_Start, Controller, Models und Ansichten Ordner auch, aber nicht Bin offensichtlich).
Nach dem Setup habe ich die Unterordner und Dateien aus dem entsprechenden obersten Ordner in Windows Explorer kopiert und in die Lösung eingefügt. Wenn Sie es so machen, erlaubt Ihnen das Projekt, direkt in Unterordner und Inhalt zu kopieren, indem Sie vorhandene Objekte über Visual Studio nur Kopien in Dateien hinzufügen und so Zeit sparen.Bitte beachten Sie: für den Stammordner, ich habe NICHT Kopie in web.config oder Global.asax, aber in allen anderen Dateien (wie default.aspx, etc.) kopiert
Sobald alle Inhalte waren kopiert, habe ich web.config im neuen Projekt und web.config in der bestehenden Site geöffnet. Ich kopierte in die neue web.config alles, was spezifisch für die bestehende Website ist (appSettings, connectionStrings, Namespaces, Mitgliedschaftsinformationen, etc.). Das gleiche gilt für die Global.asax-Dateien.
Ich versuchte einen Build und reparierte alles, was ich vermisst hatte.
Sobald alles richtig war (und ich ein paar gelbe Bildschirme des Todes abgeschossen hatte) bemerkte ich, dass ich die Seite nicht gefunden Fehler beim Laden default.aspx. Dies ist auf Routing, ist hier die Änderungen, die ich an die Routing-Informationen aus (in Global.ascx MVC 3 oder 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 }
);
}
Mit all diesen Maßnahmen getroffen , die Seite geladen und lief wie immer, aber ich habe jetzt eine ASP.NET WebForms und MVC-Hybrid. Ich bin mir sicher, dass es wahrscheinlich leichtere Möglichkeiten gibt, diese Aufgabe zu erfüllen, aber ich habe andere Methoden ausprobiert und ist gescheitert. Dieser Weg dauerte ungefähr 20 Minuten und ich war am Laufen ... gut gesessen und programmiert :)
Toller Beitrag, alle Links, die ich bei der gleichen Sache verwendet habe. – Odd