Jak posypać ASP.Net MVC do istniejącego projektu strony internetowej? [zamknięte]

Mam dziedzictwo (haha) ASP.Net Webforms Projekt strony www w Visual Studio 2008 SP1, do którego chciałbym stopniowo wprowadzać funkcjonalność MVC.

Większość informacji, które mogę znaleźć na temat tego, jak zintegrować ASP.Net MVC z WebForms wydaje się zakładać użycie projekt aplikacji WWW. Jednak wydaje się niemożliwe, aby znaleźć informacje o tym, jak zmodernizować istniejący ASP.net Projekt strony internetowej z ASP.Net MVC funkcje.

Przejrzałem post Scotta Hanselmana i Rozdział 13 jego nadchodzącej książki, oba zakładają typ Web Application Project .

Czy to możliwe? Czy ktoś wie jak to zrobić?

Author: Kris, 2009-02-21

8 answers

Cóż na początek dodanie MVC do projektu webforms jest dość proste, aby uzyskać FUNKCJE W VS 2008 dla MVC wymaga trochę więcej pracy (nadal łatwe). Najpierw chcesz mieć pewność, że odwołujesz się do zestawów i używasz. Net 3.5. Po drugie możesz utworzyć folder controllers i folder views w bieżącym projekcie formularzy internetowych. Można również utworzyć prosty kontroler z akcją index. Następnie skonfiguruj / skonfiguruj trasy w globalnym.plik ascx. Powinieneś być stamtąd ustawiony. Sprawdź Tutaj w celach informacyjnych.

Jednak będziesz mógł tworzyć tylko strony aspx z zakodowanymi zakodami (możesz je usunąć i wprowadzić odpowiednią klasę dziedziczenia w znacznikach). Aby faktycznie "przekonwertować" typ projektu, aby uzyskać dobroć MVC i visual studio (Dodaj nowy widok, kontroler goto, itp.), trzeba trochę się bawić. Moja najlepsza rada to stworzyć nowy projekt MVC W VS 2008 i Nowy projekt aplikacji internetowej i porównać .pliki csproj w postaci zwykłego tekstu. Jest długi ciąg znaków, który mówi VS szablon projektu.

Uwierz mi, to działa. Robiłem to już wcześniej w moich własnych projektach. Nie pamiętam, jak znalazłem projekt typu "klucz" oprócz prób/błędów / eliminacji. ASP.Net MVC gra ładnie w tym samym projekcie co webforms.

UPDATE: myślę, że możesz zmienić typ projektu MVC, który nadal jest aplikacją internetową, używając ich w PropertyGroup of the .plik csproj. Porównaj je z tym, co masz i zmień ten, który jest inny, pamiętaj, aby skopiować / wykonać kopię zapasową pliku.

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

Update 2: nie wpłynie to na twój projekt lub wpływ na niego bardzo. Jeśli nie jest Ci łatwo, zrób kopię zapasową i baw się. Jeśli napotkasz zmiany, zawsze będziesz mieć kopię zapasową. Na początku byłem sceptyczny, ale cieszę się, że poszedłem ścieżką MVC.

 24
Author: Kyle LeNeau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-25 14:14:14

Pomyślałem, że dam zaktualizowaną odpowiedź używając całkowicie nieobsługiwanego narzędzia Visual Studio 2010 SP1 / NuGet / Scott Hanselman.

  1. Install MVC3 (w / nuget) http://www.asp.net/mvc/mvc3
  2. Przejdź do menu" Narzędzia "w Visual Studio i wybierz" Menedżer pakietów bibliotek " \ "Konsola Menedżera pakietów"
  3. Gdy pojawi się okno konsoli, zmień "domyślny projekt" na projekt formularzy internetowych.
  4. Type " Install-Package AddMvc3ToWebForms" ( http://nuget.org/List/Packages/AddMvc3ToWebForms )

To doda wszystkie niezbędne biblioteki DLL, pliki javascript, www.zmiany ustawień konfiguracyjnych itp. w projekcie. Jeśli wszystko się powiodło, powinieneś być w stanie nacisnąć F5, przejść do "home" na swojej stronie internetowej i zobaczyć przykładowy formularz renderowany przez mvc: "Welcome to ASP.NET MVC, zaktualizowany o pakiet NuGet w całkowicie nieobsługiwany sposób przez Hanselmana! Brak gwarancji!".

 19
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-08 15:41:05

Dla projektu strony internetowej, wystarczy dodać Kontrolery do App_Code, a nie root. Będziesz tęsknić za jakimś vs dobroci - jak nie wie, że używasz MVC bez pliku csproj, ale rzeczywiście będzie działać.

Pamiętaj tylko, aby dziedziczyć z Controller i ViewPage i powinieneś być dobry.

 7
Author: Mark Brackett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-26 15:06:24

Miałem dość duży ASP.NET web site (Nie Aplikacja internetowa) i chciał dodać do niej MVC3. Nie miałem możliwości zmiany typu projektu więc musiałem przejść na stronę www (asp.net 4, 0).

Używam oddzielnego projektu MVC, ale nie jako własnej aplikacji internetowej, ale jako assembly w mojej starej stronie internetowej.

Oto podsumowanie tego, co zrobiłem:

  • stworzyłem nową aplikację webową MVC3 w Visual Studio 2010, użyłem pustego szablonu i widoku Razor silnik.
  • dodałem go do rozwiązania z moją istniejącą stroną internetową.
  • zmieniłem ścieżkę wyjściową dla złożenia z lokalnego kosza katalog do katalogu bin mojej strony www.
  • usunąłem foldery 'Content' I 'Scripts' z aplikacji MVC. Obie treści i skrypty są już częścią mojej strony internetowej i mogę odwołaj się również do nich z "stron" MVC.
  • usunąłem Globalny.asax.* pliki z projektu. Używam Global.asax w sieci miejscu.
  • skopiowałem folder "widoki" i podfoldery na stronę internetową. Ponieważ są to rzeczywiste pliki, a nie część zespołu, muszą istnieć w witrynie internetowej Nie projekt, który buduje zespół MVC.
  • w tym momencie mogłem usunąć folder 'Views' z projektu MVC, ale tylko w tym typie projektu otrzymuję wsparcie Visual Studio dla dodawania nowego widoku. Więc czasami tworzę widok tutaj, a następnie przenoszę go na stronę internetową. Podczas edycji pliki cshtml na mojej stronie internetowej, nadal dostaję pełny Intellisense.
  • Dodano Routing do strony internetowej. Skopiowałem kod z MVC global.asax na świecie.asax mojej strony. Potrzebujemy kilku zastosowań:

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

W Application_Start potrzebujemy:

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

Następnie dodaj zwykłe metody routingu:

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

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

        // your routes
    }

Następnie dodaj kilka rzeczy do sieci.konfiguracja Twojej strony www. W systemie.web w ramach kompilacji potrzebujemy następujących zespoły:

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

Początkowo dodałem też do web trochę przestrzeni nazw MVC.config ale wydaje się działać dobrze bez nich.

Teraz tworzysz nowe trasy w trybie globalnym.asax witryny sieci Web, a następnie dodać odpowiedni kontroler w projekcie MVC, a następnie z powrotem do witryny sieci Web, aby dodać widok dla niego. Tak więc logika jest w złożeniu, podczas gdy widoki i routing są zdefiniowane w witrynie internetowej.

Nadal można debugować w kontrolerach MVC, ustawiając TAM punkty przerwania, ale Debuguj uruchamiając stronę internetową.

Jeśli używasz sugerowanej domyślnej trasy MVC:

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

Wezwanie do www.mysite.com poda zawartość kontrolera domowego / view not your old default.Strona główna aspx, więc po prostu nie używam takiej trasy. Jeśli trasy są sprzeczne z istniejącymi fizycznymi folderami i plikami, użyj ograniczeń z wyrażeniami regularnymi na trasach, aby wykluczyć takie konflikty.

Mimo, że używam stron wzorcowych w witrynie internetowej, rzeczywisty html dla wspólnego części strony są tworzone za pomocą kodu w innym złożeniu. Mogę po prostu wywołać te same metody z mojego _ViewStart.cshtml lub mój kontroler bazowy.

Do tej pory nie widziałem żadnego prawdziwego negatywnego podejścia do tego podejścia.

 6
Author: Peter Hahndorf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-17 09:36:43

Tak długo, jak ustawisz routing w sieci.config, skonfiguruj odpowiednią strukturę katalogów i dodaj odpowiednie trasy w global.asax, teoretycznie można dodać elementy MVC do dowolnego projektu www. Z tego co wiem, to są jedyne wymagania, żeby to działało.

Jednak połączenie tych dwóch może być nieco mylące i trudne do utrzymania w dłuższej perspektywie. Być może można przenieść całą istniejącą zawartość witryny web forms do podfolderu, aby utrzymać ją z drogi i zachować root katalog stron czysty, aby zmniejszyć bałagan i uczynić rzeczy bardziej przejrzyste.

 2
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-20 22:53:24

Jeśli chcesz dodać MVC 3 do asp.net strona internetowa, a nie projekt internetowy, a następnie pakiet AddMvc3ToWebForms NuGet Scotta Hanselmana dostanie 99% drogi tam, ale rzuci błąd podczas instalacji, którą możesz zignorować (myślę, przynajmniej w moich testach wydaje się, że tak jest), i kilka prostych kroków są potrzebne po instalacji.

Pełne szczegóły na http://delradiesdev.blogspot.com/2011/08/adding-mvc-3-to-aspnet-web-site.html

Mark (@delradie)

 1
Author: Mark Middlemist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-04 13:48:46

Coś, czego się nauczyłem podczas próby migracji aplikacji MVC2 jest to, że twój projekt potrzebuje domyślnej.aspx. Miałem za zadanie dodać kilka funkcji GUI do istniejącego projektu usług internetowych, a zatem nie było domyślnego.aspx. Trochę mi zajęło ustalenie, dlaczego Moje trasy nie były ustawione.

 0
Author: Chris Kemp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-19 11:57:23

Egzamin Microsoft. NET 4.0 na temat tworzenia stron internetowych (70-519) ma prawie to dokładnie pytanie w materiałach prep. Według Microsoftu odpowiedź brzmi:

  1. Konwersja strony web forms do aplikacji internetowej(np. projektu webapp).
  2. Dodaj referencje do "the ASP.NET MVC 2 assemblies" w pliku konfiguracyjnym webapp.

Ta informacja jest w płatnych materiałach zakupionych przez mojego pracodawcę, więc nie musi istnieć strona internetowa, na której wyraźnie to stwierdzam link.

 0
Author: Lisa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-27 13:16:58