Iteam
GitHub

Anpassa ASP.NET Web Forms för MVC 2

Som utvecklare undviker jag gärna att blanda olika tekniker för mycket i en applikation, detta är förmodligen ett försök att hålla dem hyfsat strömlinjeformade och enkla att överblicka. ”För mycket” är förstås ett troll i resonemanget och relativt förutsättningar såsom inblandade tekniker, problemställning och tillgänglig tid.

Detta var ett dilemma vårt team ställdes inför ganska nyligen när vi skulle bygga om ett av presentationslagren på en sajt och det passade bra att välja ASP.NET MVC som plattform. Presentationslagret och övriga delar av sajten var gjort i ASP.NET Web Forms, det var alltså en ganska stor teknikskillnad. Nästa gång vi behöver göra förändringar i ramverk och övriga delar av sajten kommer vi sannolikt att vilja göra det i MVC också men det passar helt enkelt inte att göra det just nu.

Så hur löser vi det här?

Ska vi skapa ett nytt MVC-projekt och lyfta in äldre delar eller göra det möjligt att köra MVC i vårt befintliga projekt?

Vi valde att lägga till MVC i vårt Web Forms-projekt, framförallt på grund av att dom äldre delarna är långt mer omfattande än det som ska byggas om.

Kombinera ASP.NET Web Forms och ASP.NET MVC 2 i samma projekt

Egentligen är det få saker som skiljer ett Web Forms-projekt från ett MVC 2-projekt. Det som skiljer dem åt är främst referenser, folderstruktur och routes som används för navigering.

1) Visual Studios projekt-GUID för MVC 2

För att Visual Studio ska förstå att ditt Web Forms-projekt även kommer att innehålla MVC 2 behöver du lägga till ett GUID i din projektfil (.csproj, .vbproj eller något annat beroende på ditt språk). Det gör du i<ProjectTypeGuids></ProjectTypeGuids>.Tänk på att att inte ta bort tidigare nycklar härifrån utan enbart lägga till GUID för MVC 2: F85E285D-A4E0-4152-9332-AB1D724D3325.

2) MVC-relaterade referenser

Lägg till System.Web.Routing, System.Web.Abstractions och System.Web.Mvc bland dina referenser.

Gör följandetillägg i web.config:

3) Routings

Lägg till routings i Application_Start (global.asax).

4) Folderstruktur

Lägg till de mappar som skapas automatiskt när man väljer ett nytt MVC-projekt i Visual Studio, nämligen: Controllers, Views och Views/Shared. I Views lägger du till en web.config för att hantera undantagsinställningarna för Views. Också detta är samma web.config som skapas automatiskt för nya MVC-projekt.

5) Kompilering av Views

Views kompileras enbart vid första request, alltså inte när man kompilerar hela projektet i Visual Studio. Det här kan vara en klar fördel eftersom det går snabbare att kompilera och köra igång debuggern när du utvecklar. Nackdelen är förstås att du inte märker de kodfel som smugit sig in i dina Views förrän du är mitt i dina tester lokalt eller när du redan Release-kompilerat och lagt ut i din testmiljö.

Naturligtvis är det möjligt att kompilera även Views samtidigt som du kompilerar projektet i Visual Studio, men om det passar dig och ditt projekt är alltså upp till dig!

Det som krävs för att kompilera Views direkt är ett par ändringar i projektfilen (förhoppningsvis .csproj). I projektfilen finns ett par element för ProjectGroup (<ProjectGroup>) och i den du vill ändra lägger du till<MvcBuildViews>true</MvcBuildViews>.Varje ProjectGroup har egna villkor som används t ex för att ange om inställningarna gäller Debug- eller Releasekompilering. Så om du vill kan du alltså lägga till MvcBuildViews enbart för Release.

Din projektfil kan t ex se ut såhär:

Kör hårt!

Johanna Gustafsson
2010-09-20