WebForm与MVC混用


    当我听到这个噩耗时,我是拒绝的。  你想啊,一个是事件驱动 一个是请求响应模型。怎么改?所以我决定回复他这样:

WebForm与MVC混用

     可是他给我起了个头,那两个项目。一个MVC一个WebForm,可以混用吗?

   那么答案是:可以啊!~

一、WebForm项目添加引用:

WebForm与MVC混用

我都是选了最高的版本。


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

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

WebForm与MVC混用


三、修改配置文件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>



这里面,有些内容是添加引用后,系统自动写上去的

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


  1. <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) 
    {
        // 在应用程序启动时运行的代码
        //AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);        
    }
    public static void RegisterRoutes(RouteCollection routes)
    {
        //避免对 Web 资源文件(例如 WebResource.axd 或 ScriptResource.axd)的请求传递给控制器
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

        routes.MapRoute(
            name: "store" // 路由名称
            , url: "{id}/{controller}/{action}" // 带有参数的 URL。看到没,不一定是{controller}放在前面,顺序可以自己调
            , 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的问题。详见拙作:


你可能感兴趣的:(mvc)