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,收工。

懒惰,是一个通病。 努力,必会成为一种习惯。
相关文章
相关标签/搜索