2011-04-21 72 views
3

我有以下两种途径来定义:ASP.NET MVC 3 Url.Action匹配

routes.MapRoute(null, "" // ~/ 
       ,new { controller="Products", action="List", page=1 }); 

routes.MapRoute(null, "{category}/Page{page}" // ~/CategoryName/Page21 
       , new { controller = "Products", action = "List", page = 1 } 
       , new { page = @"\d+" } //page must be numerical 
       ); 

我生成使用视图此代码的URL正在使用的ProductsController:Url.Action("List", new {page=p, category=Model.CurrentCategory})

随着当前的配置,我得到这个网址:/骑马/第2页

不过,如果我是忽略默认页面参数从第一条路,我得到这个网址,而不是:/类别=骑&页= 2

在我看来,那Url.Action()可以匹配这两条路径,并且正在使用第二个途径,如果我有默认在第一路指定页面参数的决定但是如果该参数被省略,则选择使用第一路由。

鉴于我为页面参数提供了一个值,为什么要从路由的默认值中排除它会影响我返回的URL?

谢谢!

回答

1

尝试安装NuGet包Glimpse。它具有优秀的路由调试功能,应该可以帮助你。

这里有一个博客帖子斯科特Hanselan如何使用它:NuGet Package of the Week #5

+1

谢谢你,@JamesAllen。我试过Glimpse。它向我显示了匹配我的页面的路线。我无法找到任何可以告诉我为什么我的视图中的Url.Action()选择我在帖子中提到的路线的信息。 – Ryan 2011-04-21 08:18:06