您的位置:首页 > asp.net > MVC >

如何在现有的asp.net webform中加入MVC

2012-12-08 11:06 来源:未知编辑:admin点击:

如何在现有的asp.net webform中加入MVC
 
现在MVC已经越来越成熟了,Razor引擎的加入也使mvc的view更加方便,现在就有不少老的webform应用想升级mvc可是又没有哪么多的实力,但还想使用mvc的一些特性,见于这种情况我们怎么办呢,下面我就一步一步的教大家怎么在WebForm里加入mvc呢?
一。新建一个MVC3应用程序




然后我们把mvc项目里的一些文件文件夹复制到我们原来的Web项目中
把mvc项目的结构copy到webform项目里面去(将content,controllers,scripts,views这四个文件夹copy到webform项目根目录下,把这四个文件添加到这个项目里面去
见下图上面是MVC项目下面是一个空的WebForm项目就当是一个原来WebForm项目
2.在旧的webForm项目里面添加引用这三个类库,分别是:system.web.mvc,system.web.abstractions,system.web.routing
可以右键查看原来MVC3项目中的引用dll位置添加到我们的webform项目里
接下来就是修改配置文件了,有三个地方要修改
1.在程序集节点<assembies>中添加3个相关的asp.net 3.5 mvc程序集

<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

2.在页面节点<pages>添加相关的命名空间

    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <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.Web.WebPages"/>
      </namespaces>
    </pages>

   3.在http模块节点<httpModules>添加程序入口

<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
设置路由(记得引入system.web.mvc命名空间,要不然找不到IgnoreRoute这个方法)

  protected 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(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}

 

routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");表示aspx页面不经过路由处理.其它的应该看得懂了,就是路由基本规则了!

 

然后就大公告成了!

这时可能会问,那两者是否可以互相关联,答案是当然可以了!比如你在mvc页面里面可以直接转到webform页面(Response.Redirect("default.aspx");),在webform页面想转到mvc页面也很简单(Response.Redirect("Home/Index");)

至于数据的传递,可以使用session,在页面的session里面存入值之后,在控制器也可以直接用session取得!两个session没有本质上的区别,在webform页面提交了表单之后,在控制器也可以使用form来获取 response.form[文本id].tostring();就可以获得了!

 

基本就是这样了!

 

通过本文的讨论,相信大部分朋友都可以掌握基本的应用了,当然,我也可能会理解错其中的一些东西,希望大家指出,欢迎讨论!