在MVC3中使用WebForm

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

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

  既然mvcwebform各有各的好处,那么我们就可以根据需要在项目中都使用它,于是就有个问题产生了,我们都知道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 访问

效果如下:

 

 

原文地址:https://www.cnblogs.com/qiuyan/p/3153985.html