WebForm中使用MVC

http://www.cnblogs.com/encoding/articles/3556046.html
*************************************************************
  • 前言

掐指一算,3年沒寫博了,好懶的說。。。html


衆所周知,MVC如今愈來愈火了,不懂MVC的程序猿都很差意思說本身是搞網站開發的。web

雖然MVC與WebForm各有所長,可是基於種種緣由,不少用WebForm開發的網站須要轉移到MVC上面來。可是,原有的系統上面有很是很是 龐大的業務代碼和頁面代碼,在實際工做中,不可能將一個WebForm開發的網站一次性所有轉換到MVC框架中來,那麼這個時候,就要用到本文說的:在 WebForm中使用MVC。採用一個頁面一個頁面的方式,逐漸將整個網站所有轉移到MVC中。mvc


  • 爲WebForm項目添加引用

要使用MVC,確定要爲項目添加MVC的引用,因爲是咱們本身操做,確定不會像經過VS建立MVC項目那樣引用一大篇的dll。必須引入的有如下幾個:app

複製代碼

System.Web.Abstractions;
System.Web.DynamicData;
System.Web.Mvc;
System.Web.Optimization;
System.Web.Razor;
System.Web.WebPages;
複製代碼
  • 創建MVC項目結構

使用MVC最大的一個好處就是細分了網站層,因此MVC中約定俗成的幾個目錄一個都不能少。Controllers、Views、Models、Scripts、Content幾個文件是必須按照MVC項目結構搬移過來。

固然,Controllers和Models你能夠自定義到其餘dll中去,Scripts和Content你也能夠使用本身的目錄結構存放。可是 Views必須放在根目錄下,而且Views目錄中結構必須以下圖所示(Shared目錄和目錄中的文件不能少,_ViewStart、 Web.config文件也不能少,至於Home目錄,是本身開發的,能夠沒必要理會):框架

image

  • 配置Web.config文件

原有WebForm的Web.config中的節點不要隨便動,將下面的config內容中各個節點添加到原有的Web.config文件中。測試

複製代碼
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <appSettings> <add key="webpages:Enabled" value="false" /> </appSettings> <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc"/> <add namespace="System.Web.Mvc.Ajax"/> <add namespace="System.Web.Mvc.Html"/> <add namespace="System.Web.Routing"/> <add namespace="System.Linq"/> <add namespace="System.Collections.Generic"/> </namespaces> </pages> </system.web.webPages.razor> <system.web> <compilation debug="true" targetFramework="4.5"> <assemblies> <add assembly="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </assemblies> </compilation> <httpRuntime targetFramework="4.5" /> <pages> <namespaces> <add namespace="System.Web.Mvc"/> <add namespace="System.Web.Mvc.Ajax"/> <add namespace="System.Web.Mvc.Html"/> <add namespace="System.Web.Routing"/> <add namespace="System.Linq"/> <add namespace="System.Collections.Generic"/> </namespaces> </pages> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
複製代碼

關鍵是configSections、appSettings、system.web.webPages.razor三個節點,若是有丟失,那麼cshtml文件將在開發時沒法識別razor語法(運行時可以識別)。網站

system.web節點中的兩段引用若是缺失,MVC頁面將沒法訪問。ui

system.webServer中的<modules runAllManagedModulesForAllRequests="true"/>節點若是丟失,MVC頁面將沒法訪問。url

  • 註冊路由

好了,結構搭建完成,如今要爲MVC的路由進行註冊了。spa

WebForm中有一個文件叫作全局應用程序類Global.asax,若是沒有,就添加一個。

在Golbal.asax的Application_Start事件中,添加如下代碼:

複製代碼
RouteCollection routes = RouteTable.Routes;

            //避免對 Web 資源文件(例如 WebResource.axd 或 ScriptResource.axd)的請求傳遞給控制器 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //避免aspx頁面的請求傳遞給控制器 routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); //路由註冊  routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
複製代碼

怎麼樣,這段代碼是否是很熟悉?不錯,它就是MVC項目中App_Start目錄下的RouteConfig.cs文件的RegisterRoutes方法代碼。

image

  • 測試一下

來個gif動態圖。

webmvc

OK,收工。

懶惰,是一個通病。 努力,必會成爲一種習慣。
相關文章
相關標籤/搜索