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 訪問
效果如下: