《Pro ASP.NET MVC 3 Framework》学习笔记之十九【URL和Routing】
2012-02-18 15:49
495 查看
创建传出的URL(Outgoing URLs)
处理传入的URL(Incoming URLs)仅仅是路由系统的一部分功能。我们也需要使用URL架构来创建Outgoing URLs,我们可以将这些URL嵌入到我们的View里面,并且能够让用户点击URL提交表单给我们的应用程序,并能够命中合适的controller和action。
下面会展示用不同的技术来创建Outgoing URLs:
最便捷的创建Outgoing URLs就是手动定义如:<a href="/Home/About">About this application</a> 这样的URL。这个URL会命中HomeController中的About action方法。手动定义Outgoing URLs的确非常便捷,但是这样做也是非常危险的,因为一旦你改变了自己应用程序的URL架构,你就打破了所有手动创建的Outgoing URLs。你必须排查修改所有的View里面的Outgoing URLs,并更新所有的Controller和Action中对这些URL的引用。
Routing System能够从URL架构创建URL,因此如果URL架构发生了变化,那么由此创建在View里面的Outgoing URLs也会随之发生改变。显然这种方式才是明智之举,但也需要我们在前期做一些初始化的工作,这是非常值得的,长远来看这会让我们获益匪浅。
下面会通过实例来说明,仍然借用前面的项目,
只不过做些修改:1)移除AdditionalControllers 2)修改RegisterRoutes如下:
View Code
根据一个具体的Route创建URL
我们在使用routes.MapRoute()时一般传了一个名字作为参数,如下面这样的:
routes.MapRoute("MyRoute", "{controller}/{action}");
routes.MapRoute("MyOtherRoute", "App/{action}", new { controller = "Home" });
给route命名有如下两个理由:
1.可以用来提示该路由的作用 2.在创建Outgoing URL时可以选择具体的route
我们在使用@Html.ActionLink("Click me","About")时具体会选择那一个route呢?
答案就是:定义在RegisterRoutes()里面的第一个route。这里选择的就是MyRoute。当然我们也可以自己指定一个route,如@Html.RouteLink("Click me", "MyOtherRoute", new { action = "About" });
不建议使用命名路由的情形
创建Outgoing URL依赖route命名会打破"分解关注点"(这是MVC设计模式的核心思想)。当在view或action里面创建URL或链接时,我们的关注点是用户将被定向到的action和Controller,不是要使用的URL格式。所以我们倾向于避免给route命名,而是是用null代替。
好了,今天的笔记做到这里!
周末愉快!
处理传入的URL(Incoming URLs)仅仅是路由系统的一部分功能。我们也需要使用URL架构来创建Outgoing URLs,我们可以将这些URL嵌入到我们的View里面,并且能够让用户点击URL提交表单给我们的应用程序,并能够命中合适的controller和action。
下面会展示用不同的技术来创建Outgoing URLs:
最便捷的创建Outgoing URLs就是手动定义如:<a href="/Home/About">About this application</a> 这样的URL。这个URL会命中HomeController中的About action方法。手动定义Outgoing URLs的确非常便捷,但是这样做也是非常危险的,因为一旦你改变了自己应用程序的URL架构,你就打破了所有手动创建的Outgoing URLs。你必须排查修改所有的View里面的Outgoing URLs,并更新所有的Controller和Action中对这些URL的引用。
Routing System能够从URL架构创建URL,因此如果URL架构发生了变化,那么由此创建在View里面的Outgoing URLs也会随之发生改变。显然这种方式才是明智之举,但也需要我们在前期做一些初始化的工作,这是非常值得的,长远来看这会让我们获益匪浅。
下面会通过实例来说明,仍然借用前面的项目,
只不过做些修改:1)移除AdditionalControllers 2)修改RegisterRoutes如下:
View Code
public ActionResult MyActionMethod() { string myActionUrl = Url.Action("Index", new { id = "MyId" }); string myRouteUrl = Url.RouteUrl(new { controller = "Home", action = "About" }); return Redirect(myRouteUrl); }
根据一个具体的Route创建URL
我们在使用routes.MapRoute()时一般传了一个名字作为参数,如下面这样的:
routes.MapRoute("MyRoute", "{controller}/{action}");
routes.MapRoute("MyOtherRoute", "App/{action}", new { controller = "Home" });
给route命名有如下两个理由:
1.可以用来提示该路由的作用 2.在创建Outgoing URL时可以选择具体的route
我们在使用@Html.ActionLink("Click me","About")时具体会选择那一个route呢?
答案就是:定义在RegisterRoutes()里面的第一个route。这里选择的就是MyRoute。当然我们也可以自己指定一个route,如@Html.RouteLink("Click me", "MyOtherRoute", new { action = "About" });
不建议使用命名路由的情形
创建Outgoing URL依赖route命名会打破"分解关注点"(这是MVC设计模式的核心思想)。当在view或action里面创建URL或链接时,我们的关注点是用户将被定向到的action和Controller,不是要使用的URL格式。所以我们倾向于避免给route命名,而是是用null代替。
好了,今天的笔记做到这里!
周末愉快!
相关文章推荐
- 《Pro ASP.NET MVC 3 Framework》学习笔记之二十【URL和Routing】
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.12.ASP.NET MVC3的细节:URLs,Routing和Areas
- ASP.NET MVC Framework体验(5):路径选择(URL Routing)
- 《Pro ASP.NET MVC 3 Framework》学习笔记之二十一【Area及URL架构的最佳实践】
- Asp.net Mvc Framework可以在Controller中使用的Url.Action方法
- [译]Pro ASP.NET MVC 3 Framework 3rd Edition (Chapter 20 JQuery) 3.Writing jQuery Code 编写jQuery代码
- 《Pro ASP.NET MVC 3 Framework》学习笔记之九【Ninject的使用-下】
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.1.主要语言特性
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.2.MVC的主要工具-Ninject
- 电子书下载:Pro ASP.NET MVC Framework
- ASP.NET MVC 重点教程一周年版 第二回 UrlRouting 【转】
- 电子书下载:Pro ASP.NET MVC 3 Framework 3rd Edition
- 《Pro ASP.NET MVC 3 Framework》学习笔记之十五
- 这个时候 快下班了 我来翻译一段: Pro ASP.NET MVC 3 Framework
- Asp.net Mvc Framework可以在Controller中使用的Url.Action方法
- Asp.net MVC源码分析--UrlRoutingModule与Service location的亲密接触
- 从零开始学习 ASP.NET MVC 1.0 (二) 识别URL的Routing组件 【转】
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.9.SportsStore:Securing the Administration Features
- 《Pro ASP.NET MVC 3 Framework》学习笔记之十四【示例项目SportsStore】
- 从零开始学习 ASP.NET MVC 1.0 (二) 识别URL的Routing组件