快速业务通道

ASP.NET MVC框架 (第二部分): URL路径选择

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
不会匹配。

从路径选择系统构建输出的URL

在本文的前面,我说过ASP.NET MVC框架中的URL路径选择系统负责两件事情:

把进来的URL映射到处理的Controllers/Actions上

帮着构建可以在以后用来回调Controllers/Actions的输出到客户端的URL(例如,表单提交, <a href="">链接, 和 AJAX 调用等等)

URL路径选择系统有不少辅助方法和类,方便你在运行时动态查看和构建URL(你也可以直接对RouteTable的Route集合进行操作来查看URL) 。

Html.ActionLink

在本博客系列的第一部分,我简单地讨论了Html.ActionLink()视图辅助方法。它可以在视图里使用,允许你动态地生成 <a href=""> 超链接。比较酷的是,它可以使用MVC路径选择系统里定义的URL映射规则来生成这些URL。例如,下面2个 Html.ActionLink 调用:

ASP.NET MVC框架 (第二部分): URL路径选择

automatically pick up the special Search results route rule we configured earlier in this post, and the "href" attribute they generate automatically reflect this: 会自动地使用我们在本贴子前面配置的的特殊查询结果路径规则,它们自动生成的 href属性反映了这个情况:

ASP.NET MVC框架 (第二部分): URL路径选择

特别地,注意上面,Html.ActionLink的第二个调用自动地把page参数映射成URL的一部分(也注意,第一个调用省略了page参数值,因为它 知道服务器端会自动提供默认值)。

Url.Action

除了使用Html.ActionLink外,ASP.NET MVC还有个Url.Action()视图辅助方法。该方法生成原生的字符串URL,然后你可以任何方式来使用 它们。例如,下面的代码片段:

ASP.NET MVC框架 (第二部分): URL路径选择

会使用URL路径选择系统返回下面这个原生的URL(而不是包装在 <a href=""> 元素里):

ASP.NET MVC框架 (第二部分): URL路径选择

Controller.RedirectToAction

ASP.NET MVC还提供了Controller.RedirectToAction()辅助方法,你可以在控制器里使用来进行转向操作(URL是使用URL路径选择系统计算 出来的)。

例如,当在控制器里调用下面代码时:

ASP.NET MVC框架 (第二部分): URL路径选择

在内部,它会生成一个对Response.Redirect("/Search/Beverages")的调用。

DRY (别重复自己)

上述所有的辅助方法的好处在于它们允许我们避免在我们的控制器和视图逻辑中硬写URL。如果在后来我们决定改变查询URL路径映射规则, 从"/Search/[query]/[page]" 改回到 "/Search/Results/[query]/[page]" 或者 "/Search/Results?query= [query]&page=[page]" ,我们只要在一个地方(我们的路径注册代码中)做编辑,就可以轻松搞定。我们不需要改动视图或控制器 中的任何代码,就可以捡起新的URL(这就坚持了“DRY原则”)。

使用Lambda表达式从路径选择系统构建输出的URL

前面的URL辅助方法例子使用了VS 2008中VB和C#现在支持的新的匿名类型。在上面的例子中,我们使用了匿名类型来有效地传入一串名称/ 数值对,用以帮助映射URL(你可以把这想像为生成字典的一个比较干净的方式)。

除了使用匿名类型以动态方式传递参数外, ASP.NET MVC框架还支持使用强类型机制创建action路径的能力,这些强类型机制为URL辅助方 法提供了编译时检查和intellisense。这是通过使用泛型和新的VB和C#对Lambda表达式的支持来实现的。

例如,下面这个匿名类型 ActionLink 调用:

ASP.NET MVC框架 (第二部分): URL路径选择

也可以写成:

ASP.NET MVC框架 (第二部分): URL路径选择

除了写起来简短外,这第二个选项还有类型安全的好处,这意味着你得到对表达式的编译时检查以及Visual Studio的代码intellisense( 你还可以使用重构工具对它进行重构):

ASP.NET MVC框架 (第二部分): URL路径选择

注意上面,我们是如何使用intellisense挑选出我们想用的SearchController的Action方法的,以及参数是强类型的。生成的URL都是由 ASP.NET MVC URL路经选择系统驱动的。

你也许在想,这到底是怎么回事呢?如果你还记得,8个月前,我在博客里讨论

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号