2010-02-04 16 views
39

Wäre es möglich, eine MVC-Root-Anwendung (Portal mit Masterpages und Designs) zu erstellen und ein paar WebForms-basierte Subprojekte hinzuzufügen (wir haben bereits eine bestehende WebForms-Anwendung, in die wir integrieren möchten) das Portal)?Kombinieren von ASP.Net MVC mit WebForms

Wie würden Sie die Navigation zentralisieren (Sitemaps, URL-Routing)?
Wie würden Sie die Masterseiten teilen?
Wie würden Sie auf Ressourcen verweisen (~ Probleme usw.)?

Lösungen wie das described here scheinen etwas veraltet

Antwort

5

Große Antwort oben. Die andere Sache, die Sie in Erwägung ziehen könnten, ist die Migration von ASP.NET zu ASP.NET MVC. In diesem Fall migrieren Sie die Projektdateien this post might help you.

16

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:

  1. Erstellen Ihnen eine neue ASP.NET MVC 4 Anwendung und ausgewählt, um die Leere Vorlage (mit Razor)

  2. 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

  3. 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).

  4. 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

  5. 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.

  6. Ich versuchte einen Build und reparierte alles, was ich vermisst hatte.

  7. 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 :)

0

Ich war zu sehr in dieser Situation stecken, schließlich habe ich eine Lösung, die funktioniert, vor allem Kopie web.config in Ihrem Ansichten Ordner.

Nach dieser offenen Route.config(Routeconfig) Datei, dort finden Sie eine Methode RegisterRoutes, halten Sie es finden, da es eine andere Methode RegisterRoutes2() benannt ist und erstellen, und kopieren Sie die folgenden Methode Code aus dem MVC-Anwendung einfügen:

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

in Der Name einiger Fälle in der App mvc wäre RegisterRoutes. Wenn der obige Code nicht funktioniert, kopieren Sie ihn aus der mvc-Anwendung Ihres Rechners. Dann gehen Sie zu global.asax Datei, werden Sie finden RegisterRoutes() wurde aufgerufen, jetzt einfach, rufen Sie auch RegisterRoutes2(). Und Sie sind fertig, starten Sie Ihre Anwendung neu oder reinigen Sie Build, es wird ausgeführt.