随笔 - 35  文章 - 0  评论 - 210 

ASP.NET MVC和WebForm各有各的优点,我们可能需要同时使用ASP.NET MVC和WebForm。本文介绍了如何在ASP.NET MVC项目中使用WebForm。
首先新建一个名为WebForms的文件夹用于存放WebForm,并添加一个Web窗体文件Demo.aspx作为演示。

Demo.aspx就简单的输出一句话“It’s a WebForm.”
关键步骤在于路由设置。如果你希望WebForms这个文件夹名作为URL的一部分,也就是普通WebForm应用程序的方式来访问这个Demo.aspx,那么只需要简单的忽略这个路由规则即可。
在Global.asax.cs文件的RegisterRoutes方法中加入以下代码 

// 忽略对 WebForms 路径的路由
routes.IgnoreRoute("WebForms/{weform}");

 结果:

如果希望URL更友好或者不出现WebForms这个文件夹名,那就要自己写一个类继承IRouteHandler。

 1public class WebFormsRouteHandler:IRouteHandler
 2{
 3    private string pageName = string.Empty;
 4
 5    public IHttpHandler GetHttpHandler(RequestContext requestContext)
 6    {
 7        // 从URL中获取page参数
 8        pageName = requestContext.RouteData.GetRequiredString("page");
 9
10        // 创建实例
11        // 根据 page 参数拼接成类似/WebForms/page.aspx地址来访问WebForms页面
12        IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath("/WebForms/" + this.pageName+".aspx"typeof(System.Web.UI.Page)) as IHttpHandler;
13
14        return hander;
15    }

16
17}

 

然后在Global.asax.cs文件中加上新的路由规则

// 添加一个用WebFormsRouteHandler进行处理的路由
// 其中URL中{page}所占的部分会被在WebFormsRouteHandler中当做参数使用
routes.Add(new Route("web/{page}",new WebFormsRouteHandler()));

 

当路径匹配web/{page}时用自定义的类来处理这个请求,如web/demo或web/demo1等URL都会匹配到这个路由

示例下载

 

本文适用于 ASP.NET MVC 1.0

 

Tag标签: ASP.NET,MVC
0
0
(请您对文章做出评价)
« 上一篇:重建 SQL Server 2008 系统数据库
» 下一篇:升级安装 Windows 7 RC
posted on 2009-04-17 10:18 Snowdream 阅读(1142) 评论(9)  编辑 收藏 网摘 所属分类: ASP.NET

  回复  引用  查看    
#1楼 2009-08-07 14:13 | fighter      
学习了,哈哈
  回复  引用    
#2楼 2009-09-01 00:58 | luics[未注册用户]
因为要用到webparts ,所以还是webform方便些
  回复  引用  查看    
#3楼[楼主] 2009-09-01 09:10 | Snowdream      
@luics
MVC和WebForm各有各的用处 :)

  回复  引用  查看    
#4楼 2009-10-24 01:46 | 我是一只小老虎 喵!      
如果Webforms里面有demo1,demo2,demo3...
那这不是要写无数个routes.Add(...)
楼主,是这样吗?
能否有更和谐一点的方法?

  回复  引用  查看    
#5楼[楼主] 2009-10-24 10:24 | Snowdream      
@我是一只小老虎 喵!
如果使用routes.IgnoreRoute("WebForms/{weform}");那么无论在WebForms文件夹下添加多少个WebForm页面~都可以用/WebForms/Demo1.aspx,/WebForms/Demo2.aspx等URL进行访问
如果要使用友好的URL来访问WebForms页面~由于之前写的Route只会匹配/Web/Demo所以只能访问到demo.aspx~现在需要匹配更多的WebForms只需要更新Route即可~并不需要添加很多routes.Add()~现在我已经对文章进行了更新~更新后的路由会匹配所有类似/Web/{page}这样的URL~{page}类似参数~可以是demo1,demo2,demo3~也就像在访问demo1.aspx,demo2.aspx,demo3.aspx等页面

  回复  引用  查看    
#6楼 2009-10-24 17:53 | 我是一只小老虎 喵!      
小老虎来啦.哈哈.
楼主好有热心啊.
.^_^.

  回复  引用  查看    
#7楼[楼主] 2009-10-24 22:10 | Snowdream      
@我是一只小老虎 喵!
:)

  回复  引用  查看    
#8楼 2009-11-06 10:34 | zsea      
我直接把文件放在Views外面就可以了
  回复  引用  查看    
#9楼 2009-11-11 02:17 | 啊不才      
学习了,呵呵~!