WebForm与MVC混用

在现有的WebForm项目中加入MVC,可以吗?

西蒙说,可以。

怎么加呢?

我的开发环境是:WIN7 + IIS7.5 + VS2012

一、WebForm项目添加引用:


我都是选了最高的版本。


二、将MVC项目的部分文件拷贝到WEBFORM项目

拷贝controller和views,也许还有content,scripts。Views似乎是必须的,也不能改名字,拷贝到根目录下。Controller应该拷贝到APP_CODE。



三、修改配置文件web.config

 

[html]  view plain copy
  1. <compilation debug="true" targetFramework="4.0">  
  2.       <assemblies>  
  3.         <add assembly="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>  
  4.         <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>  
  5.         <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>  
  6.         <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>  
  7.       </assemblies>  
  8.     </compilation>  
  9.     <pages>  
  10.       <namespaces>  
  11.         <add namespace="System.Web.Mvc"/>  
  12.         <add namespace="System.Web.Mvc.Ajax"/>  
  13.         <add namespace="System.Web.Mvc.Html"/>  
  14.         <add namespace="System.Web.Routing"/>  
  15.         <add namespace="System.Linq"/>  
  16.         <add namespace="System.Collections.Generic"/>  
  17.       </namespaces>  
  18.     </pages>  
这里面,有些内容是添加引用后,系统自动写上去的

最重要的,可别忘了这一句:

[html]  view plain copy
  1. <modules runAllManagedModulesForAllRequests="true"/>  

写在  <system.webServer> 里。没有这一句,将无法使用MVC模式。

四、设置路由

添加global.asax文件,设置路由

[csharp]  view plain copy
  1. <%@ Application Language="C#" %>  
  2. <%@ Import Namespace="System.Web.Routing" %>    
  3. <%@ Import Namespace="System.Web.Mvc" %>    
  4.   
  5. <script runat="server">  
  6.   
  7.     void Application_Start(object sender, EventArgs e)   
  8.     {  
  9.         // 在应用程序启动时运行的代码  
  10.         //AreaRegistration.RegisterAllAreas();  
  11.         RegisterRoutes(RouteTable.Routes);          
  12.     }  
  13.     public static void RegisterRoutes(RouteCollection routes)  
  14.     {  
  15.         //避免对 Web 资源文件(例如 WebResource.axd 或 ScriptResource.axd)的请求传递给控制器  
  16.         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  
  17.         routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");  
  18.   
  19.         routes.MapRoute(  
  20.             name: "store" // 路由名称  
  21.             , url: "{id}/{controller}/{action}" // 带有参数的 URL。看到没,不一定是{controller}放在前面,顺序可以自己调  
  22.             , defaults: new { controller = @"store", action = @"show", id = UrlParameter.Optional }//默认  
  23.             , constraints: new { id = @"[1-9]\d{3,8}" }//约束  
  24.         );          
  25.         routes.MapRoute(  
  26.             "test2",   
  27.             "{controller}/{action}/{id}",   
  28.             new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值  
  29.         );  
  30.     }      

其中,routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");是照顾现有这些直接访问.aspx的WEBFORM方式。

基本就是这样了。

对于IIS6,可以到微软下载MVC3,MVC4,依次安装好,就可以直接使用了,也没有出现MSDN上说的,要在路由上加上*.MVC的问题。详见拙作:

我的IIS7.5竟然不支持ASP.NET路由

http://blog.csdn.net/leftfist/article/details/9969797

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值