ASP.NET MVC框架 (第二部分): URL路径选择
不会匹配。
从路径选择系统构建输出的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 调用: 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属性反映了这个情况: 特别地,注意上面,Html.ActionLink的第二个调用自动地把page参数映射成URL的一部分(也注意,第一个调用省略了page参数值,因为它 知道服务器端会自动提供默认值)。 Url.Action 除了使用Html.ActionLink外,ASP.NET MVC还有个Url.Action()视图辅助方法。该方法生成原生的字符串URL,然后你可以任何方式来使用 它们。例如,下面的代码片段: 会使用URL路径选择系统返回下面这个原生的URL(而不是包装在 <a href=""> 元素里): Controller.RedirectToAction ASP.NET MVC还提供了Controller.RedirectToAction()辅助方法,你可以在控制器里使用来进行转向操作(URL是使用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 调用: 也可以写成: 除了写起来简短外,这第二个选项还有类型安全的好处,这意味着你得到对表达式的编译时检查以及Visual Studio的代码intellisense( 你还可以使用重构工具对它进行重构): 注意上面,我们是如何使用intellisense挑选出我们想用的SearchController的Action方法的,以及参数是强类型的。生成的URL都是由 ASP.NET MVC URL路经选择系统驱动的。 你也许在想,这到底是怎么回事呢?如果你还记得,8个月前,我在博客里讨论 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |