您的位置:首页 > 编程语言 > ASP

《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

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代替

好了,今天的笔记做到这里!
周末愉快!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐