在MVC3中使用WebForm

时间:2022-01-26 05:57:58

  Mvc和WebForm一直是有争议的两个平台,园子里也有很多人写过这方面的文章,给我印象比较深的是去年的时候看过的两篇文章http://www.cnblogs.com/mikelij/archive/2012/05/13/2496768.html

http://www.cnblogs.com/mikelij/archive/2012/07/09/2581768.html作者以webform中常见的viewstate作为切入点讲解,写的还是不错的,可以去看看。相比于webform的viewstate,对于mvc,我的的第一感觉就是轻、简洁,当然了,mvc也还有很多其他的优点,感兴趣的童鞋可以自行谷姐,这不是本文的重点,我就不做对比了:)。

  既然mvc和webform各有各的好处,那么我们就可以根据需要在项目中都使用它,于是就有个问题产生了,我们都知道mvc可以通过配置路由来访问,既然他们在一个项目中,那webform怎么访问呢?于是去查MSDN,我们知道了原来从asp.net4.0后,webform中也可以使用路由了,http://msdn.microsoft.com/zh-cn/library/dd329551(d=lightweight).aspx  好吧,既然都可以使用路由,那我就不废话了,直接开始吧。

  新建项目如下:

在MVC3中使用WebForm

  我得承认用控件开发报表是很快速的。

接下来在Global.asax.cs里面加上:routes.IgnoreRoute("WebForms/{weform}");

然后通过地址访问 http://localhost:4017/WebForms/ReportModule/Default.aspx

结果如下:

在MVC3中使用WebForm

  有时我们不希望出现webforms文件夹,这时我们就可以写一个类去继承IRouteHandler

public class WebFormsRouteHandler : IRouteHandler
{ public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
string moduleName = requestContext.RouteData.GetRequiredString("module");
string pageName = requestContext.RouteData.GetRequiredString("page"); return BuildManager.CreateInstanceFromVirtualPath(string.Format("~/WebForms/{0}/{1}.aspx",moduleName, pageName),typeof(System.Web.UI.Page)) as IHttpHandler;
}
  }

  然后在Global.asax.cs中加上新路由规则:

routes.Add(new Route("Web/{module}/{page}",new WebFormsRouteHandler()));

我们再通过地址 http://localhost:4017/web/ReportModule/Default 访问

效果如下:

在MVC3中使用WebForm