2012-10-09 8 views
5

Niedawno dołączyłem do grupy, która zarządza aplikacją klasyczną ASP. To działa dobrze dla potrzeb naszej grupy. Jednakże, zanim dołączyłem, podjęto decyzję o przejściu na ASP .Net. Ponieważ w większości jesteśmy programistami ASP, piszemy kod w ASP .Net, jak w klasycznej ASP (w przeważającej części). Czy byłoby możliwe wprowadzenie MVC do tej aplikacji/projektu?Czy platforma MVC może być używana w aplikacji sieciowej, która obecnie korzysta z ASP .NET?

Dzięki!

Odpowiedz

2

Tak, możliwe jest użycie MVC w tradycyjnym projekcie WebForms. I przeniesione dużego projektu WebForms do MVC 2 kilka lat temu, a tu są moje wnioski (mam zaktualizowany do refleksji MVC 3)

  1. Sprawdź, czy masz zainstalowany .NET 4.0, jak również MVC 3 frameworki i rozszerzenia VS.
  2. Utwórz nowy pusty projekt MVC, który będzie używany jako odniesienie.
  3. Zobacz domyślny plik web.config dla projektu referencyjnego. Zasadniczo chcesz użyć referencyjnego pliku web.config i połączyć potrzebne elementy z bieżącym projektem.
  4. Zobacz referencję global.asax.cs. Podobnie do powyższego, chcesz scalić zmiany w pliku referencyjnym .cs do pliku global.asax.cs bieżącej aplikacji.
  5. Trzeba dodać następujące odniesienia do projektu internetowej:

    System.Web.Abstractions, System.Web.Extensions, System.Web.Helpers, System.Web.Mvc, systemu .Sieć.Routing

  6. Można włączyć rozszerzenia VS zmieniając ProjectTypeGuids:

    • W Solution Explorer, kliknij prawym przyciskiem myszy nazwę projektu i wybierz Zwolnij Project. Następnie ponownie kliknij prawym przyciskiem myszy nazwę projektu i wybierz Edit ProjectName.csproj.
    • Znajdź element ProjectTypeGuids i dodaj {E53F8FEA-EAE0-44A6-8774-FFD645390401}.
    • Zapisz zmiany, kliknij prawym przyciskiem myszy projekt, a następnie wybierz polecenie Przeładuj projekt.
  7. Dodaj następujące standardowe foldery treści MVC:

    • ~/Odwiedzin
    • ~/Views/Shared
    • ~/Kontrolery
    • ~/modeli (dla Pana zdaniem modeli , opcjonalnie)
    • ~/Zawartość (dla CSS i obrazów, opcjonalnie)
    • ~/Skrypty (dla JS, opcjonalnie)

Dodatkowe uwagi:

  1. Jeżeli istniejące WebForms zależy od ustawień web.config dla zezwolenia (takie jak zapobieganie nieautoryzowanym użytkownikom), to nie zostanie uznane przez działania MVC, ponieważ Routing działa zupełnie niezależnie od autoryzacji WebForms. Użyj AuthorizeAttribute, aby wymagać autoryzacji lub ograniczyć działania do określonych ról lub użytkowników. Możesz nawet specify global filters, więc nie musisz stosować tego atrybutu dla każdego kontrolera lub akcji.
  2. Mogą istnieć dodatkowe uwagi dotyczące pracy MVC z wersjami IIS przed 7 lub z pulami aplikacji używającymi potoku klasycznego. Rozważ użycie IIS 7+ ze zintegrowanym potokiem.
  3. Moje uwagi dotyczą głównie uzyskania linii bazowej działania MVC, która wykorzystuje widoki ASPX. Widoki ASPX używają tego samego znacznika co pliki ASPX, do których przyzwyczaiłeś się w WebForms. Możesz także użyć nowej składni Razor (primer), którą bardzo polecam. Możesz jednocześnie używać stron widoku ASPX i Razor. Jednak nie można używać strony wzorcowej ASPX w widoku maszynki (lub odwrotnie). Ponadto, MVC znajdzie i użyje widoków ASPX przed widokami Razora, więc jeśli uaktualnisz widok do Razor, usuń oryginalny ASPX. Aby włączyć widoki maszyn Razor, musisz wykonać trochę dodatkowej pracy. Próbuję znaleźć notatki na temat włączania Razor. Zaktualizuję, gdy je znajdę. Po zainstalowaniu i uruchomieniu urządzenia Razor można użyć narzędzia this tool by Telerik do konwersji programu ASPX na maszynę Razor.
  4. Here is a question na SO o problemie, który miałem podczas aktualizacji. Dostarczam go tylko dlatego, że obejmuje on niektóre z wyżej wymienionych punktów w bardziej szczegółowy sposób. Jednak w tym czasie aktualizowałem do MVC 2, więc niektóre z tych rzeczy są nieaktualne.
+0

Ta odpowiedź nie wspomina o routingu; Podejrzewam, że domyślne trasy MVC będą zakłócać dostępność większości normalnych stron ASP.Net. –

+0

@ ChrisMoschini MVC sprawdzi, czy żądany zasób pasuje do fizycznego pliku, a jeśli tak, to ten plik jest przetwarzany zgodnie z jego obsługą. Więc jeśli chodzi o strony .ASPX, to nie jest problem. Jednak będziesz musiał rozwiązać wszelkie problemy, w których masz adres URL, który można routować do MVC, a także jedną lub więcej innych procedur obsługi.Dla twojego przeciętnego projektu WebForms nie jest to zbyt częste, ale jest możliwe. Przykład: powiedz, że masz domyślny dokument .ASPX, ale chcesz przejąć MVC. Będziesz musiał: A) zmienić domyślny dokument, aby .ASPX nie był już brany pod uwagę lub B) usunąć ASPX – HackedByChinese

2

Krótka odpowiedź brzmi: tak, jest to możliwe.

Scott Hanselman napisał wcześniej o this topic.

W zależności od umiejętności w twoim zespole, możesz mieć trudności z szybkim uruchomieniem - możliwe jest napisanie czystego kodu stylu MVC w Classic ASP, ale większość ludzi tego nie robi.

1

Jest to oczywiście technicznie możliwe. Wydaje się jednak, że byłby to szok kulturowy, ponieważ MVC działa całkiem inaczej niż klasyczne ASP lub ASP.NET WebForms. Myślę, że byłoby warto to zrobić - lub po prostu trzymać się ASP.NET WebForms, jeśli wydaje się to bardziej naturalne. Ale jeśli nie jesteś jeszcze w pełni zaangażowany w WebForms, MVC wydaje się równie łatwy do przeniesienia, IMO.

1

Tak. Pracowałem nad projektem, który zaczął się jako zwykły ASP.NET, a później dodał kilka stron MVC ASP.NET. Ostatecznie podobało nam się MVC znacznie bardziej, że w końcu przenieśliśmy wszystkie nasze strony WebForms, aby użyć MVC. Ale przez cały czas oba systemy działały bardzo dobrze razem.

Oto jedyna prawdziwa zasada, o której pamiętam: program WebForms działa dzięki umieszczeniu całej strony w dużym znaczniku <form>. Ponieważ HTML nie pozwala na tworzenie zagnieżdżonych tagów <form>, zwykle nie można używać formularzy MVC na stronie WebForms. Zachowaj swoje strony WebForms oddzielnie od treści MVC, unikaj używania formularzy HTML w treści MVC, które mogą pojawić się na stronie WebForms, lub użyj okien dialogowych dla formularzy tworzonych poza obszarem DOM WebForms.

Powiązane problemy