ASP.NET MVC路由扩展:链接和URL的生成

来源:未知 责任编辑:责任编辑 发表时间:2014-02-02 17:48 点击:

ASP.NET 路由系统通过注册的路由表旨在实现两个“方向”的路有功能,即针对入栈请求的路由和出栈URL的生成。前者通过调用代表全局路由表的RouteCollection对象的GetRouteData方法实现,后者则依赖于RouteCollection的GetVirtualPathData方法,而最终还是落在继承自RouteBase的路由对象的同名方法的调用上。为了编程的方面,ASP.NET MVC为了设计了HtmlHelper和UrlHelper这两个帮助类,我们可以通过调用它们的ActionLink/RouteLink和Action/RouteUrl根据注册的路有规则生成链接或者URL。从本质上讲,HtmlHelper/UrlHelper实现的对URL的生成最终还是依赖于上面所说的GetVirtualPathData方法。
目录
一、UrlHelper V.S. HtmlHelper
二、UrlHelper.Action V.S. HtmlHelper.ActionLink
三、实例演示:创建一个RouteHelper模拟UrlHelper的URL生成逻辑
四、UrlHelper.RouteUrl V.S. HtmlHelper.RouteLink
一、UrlHelper V.S. HtmlHelper
在介绍如果通过HtmlHelper和UrlHelper来生成链接或者URL之前,我们来先来看看它们的基本定义。从下面给出的代码片断我们可以看出UrlHelper对象实际上对一个表示请求上下文的RequestContext和路由对象集合的RouteCollection对象的封装。它们分别对应于只读属性RequestContext和RouteCollection,并且在构造函数中被初始化。如果在构造UrlHelper的时候没有指定RouteCollection对象,那么通过RouteTable的静态属性Routes表示的全局路有表将直接被使用。
   1: public class UrlHelper
   2: {
   3:     //其他成员
   4:     public UrlHelper(RequestContext requestContext);
   5:     public UrlHelper(RequestContext requestContext, RouteCollection routeCollection);
   6: 
   7:     public RequestContext RequestContext { get; }
   8:     public RouteCollection RouteCollection { get;}
   9: }
再来看看如下所示的HtmlHelper的定义,它同样具有一个表示路由对象集合的RouteCollection属性。和UrlHelper一样,如果在构造函数没有显示指定,那么RouteTable的静态属性Routes表示的RouteCollection对象将会用于初始化该属性。
   1: public class HtmlHelper
   2: {
   3:     //其他成员
   4:     public HtmlHelper(ViewContext viewContext, IViewDataContainer viewDataContainer);
   5:     public HtmlHelper(ViewContext viewContext, IViewDataContainer viewDataContainer, RouteCollection routeCollection);
   6: 
   7:     public RouteCollection RouteCollection { get; }
   8:     public ViewContext ViewContext { get; }
   9: }
  10: public class ViewContext : ControllerContext
  11: {
  12:     //省略成员
  13: }
  14: public class ControllerContext
  15: {
  16:     //其他成员  
  17:     public RequestContext RequestContext { get; set; }
  18:     public virtual RouteData RouteData { get; set; }

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 浅析.NET下XML数据访问新机制
  • asp.net 面试+笔试题目第1/2页
  • C# 邮件地址是否合法的验证
  • asp.net 设置GridView的选中行的实现代码
  • C#高级编程:数据库连接[1]
  • 经典C++程序1
  • IIS 自动回收导致后台定时器失效的问题解决
  • ASP.NET GridView列表代码示例
  • Asp.net MVC源码分析--Action Filter的链式调用
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1