2011-01-24 57 views
1

我剛剛將我的mvc2應用程序升級到mvc3。路由鏈接停止工作。任何線索?asp.net mvc3 RouteLink

全球

routes.MapRoute(
      "Category",           
      "category/{cat}/{subcat}/{page}/{viewall}",         
      new 
      { 
       controller = "Category", 
       action = "Index", 
       cat = UrlParameter.Optional, 
       subcat = UrlParameter.Optional, 
       page = UrlParameter.Optional, 
       viewall = UrlParameter.Optional 
      } 
     ); 

查看

<%: Html.RouteLink("Women's", "Category", new { cat = "Women", subcat = "" })%> 

這是怎麼呈現

<a href="">Women's</a> 

回答

2

這是正常的。您只能有一個可選參數,並且此參數應該是路徑定義中的最後一個參數。所以cat,subcatpage不能是可選的。您需要提供它們的值:

<%: Html.RouteLink("Women's", "Category", new { 
    cat = "Women", 
    subcat = "somesubcat", 
    page = "123" 
})%> 

在ASP.NET MVC 3中,此規則已執行。

考慮以下網址:

category/1 
category/1/2/ 
category/1/2/3 
category/1/2/3/4 

只有最後兩個URL是可能的,因爲它是在此路由參數可以映射到相應的值無歧義的唯一案例。

+0

任何想法解釋呢?我可以看到很多人都有可能擁有多個可選參數。這可以模仿,然後使用多個路線 - 每個人都是一個「子路線」與額外的可選參數?希望這是有道理的。 – jamiebarrow 2011-06-17 09:00:53

+0

我認爲這也是一件好事,如果這是一個規則,你從MVC註冊具有多個可選參數的路由時得到一個異常 – jamiebarrow 2011-06-17 09:01:48