在现有的WebForm项目中加入MVC,可以吗?
西蒙说,可以。
怎么加呢?
我的开发环境是:WIN7 + IIS7.5 + VS2012
一、WebForm项目添加引用:
我都是选了最高的版本。
二、将MVC项目的部分文件拷贝到WEBFORM项目
拷贝controller和views,也许还有content,scripts。Views似乎是必须的,也不能改名字,拷贝到根目录下。Controller应该拷贝到APP_CODE。
三、修改配置文件web.config
- <compilation debug="true" targetFramework="4.0">
- <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>
- <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>
这里面,有些内容是添加引用后,系统自动写上去的
最重要的,可别忘了这一句:
- <modules runAllManagedModulesForAllRequests="true"/>
写在
<system.webServer> 里。没有这一句,将无法使用MVC模式。
四、设置路由
添加global.asax文件,设置路由
- <%@ Application Language="C#" %>
- <%@ Import Namespace="System.Web.Routing" %>
- <%@ Import Namespace="System.Web.Mvc" %>
-
- <script runat="server">
-
- void Application_Start(object sender, EventArgs e)
- {
-
-
- RegisterRoutes(RouteTable.Routes);
- }
- public static void RegisterRoutes(RouteCollection routes)
- {
-
- routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
- routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
-
- routes.MapRoute(
- name: "store"
- , url: "{id}/{controller}/{action}"
- , defaults: new { controller = @"store", action = @"show", id = UrlParameter.Optional }
- , constraints: new { id = @"[1-9]\d{3,8}" }
- );
- routes.MapRoute(
- "test2",
- "{controller}/{action}/{id}",
- new { controller = "Home", action = "Index", id = UrlParameter.Optional }
- );
- }
其中,routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");是照顾现有这些直接访问.aspx的WEBFORM方式。
基本就是这样了。
对于IIS6,可以到微软下载MVC3,MVC4,依次安装好,就可以直接使用了,也没有出现MSDN上说的,要在路由上加上*.MVC的问题。详见拙作:
我的IIS7.5竟然不支持ASP.NET路由
http://blog.csdn.net/leftfist/article/details/9969797