2011-01-24 53 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