2011-04-21 77 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