在MVC3中使用WebForm
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 好吧,既然都可以使用路由,那我就不废话了,直接开始吧。
新建项目如下:
我得承认用控件开发报表是很快速的。
接下来在Global.asax.cs里面加上:routes.IgnoreRoute("WebForms/{weform}");
然后通过地址访问 http://localhost:4017/WebForms/ReportModule/Default.aspx
结果如下:
有时我们不希望出现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 访问
效果如下: