2013-03-28 31 views
1

這裏是我的路線,唯一需要的參數是控制器ASP.net MVC 4路由和可選參數意想不到的結果

 routes.MapRoute(
      "countryoptional/controller", 
      "{country}/{controller}/{pagelabel}/{page}", 
      new { action = "index", country = UrlParameter.Optional, pagelabel = UrlParameter.Optional, page = UrlParameter.Optional }, 
      new 
      { 
       pays = @"$|^(france|belgium)$", 
       controller = @"^(car|boat)$", 
       pagelabel = @"^$|page", 
       page = @"^$|\d{1,6}" 
      } 
     ); 

我期待通過以下網址與合作:

/車/

/車/頁/ 2

/法國/汽車

/法國/車/頁/ 2

它種工作方式:

Url.Action("index", "car", new { country= "france", pagelabel = "page", page = 2}) 

會產生:/法國/車/頁/ 2

如果我想要一個沒有國家的網址查看動作響應,但一個構造像

Url.Action("index", "car", new { pagelabel = "page", page = 2}) 

會產生此鏈接://汽車/頁/ 2

我得到這個雙斜線「//車」,所以它打破了課程的鏈接。

我懷疑它不喜歡{country}/{controller}/... url定義中控制器可選的{country}參數的可能性 我不想讓我的路由配置複雜化,有另一個路線聲明 必須有一種方法,我做錯了什麼?

+0

在您的可選參數中,您已付款而不是國家/地區。我不確定這是否有所作爲。 –

+0

我對正則表達式並不太滿意,但我相信你會添加一個約束條件來確保該國是法國還是比利時。所以當你不提供它時,它不會設定國家的價值。 –

回答

4

可選參數必須遵循任何所需的參數。這是我無法解決的,我知道。相同的限制適用於其他任何地方(您的方法定義等)。

只要重複路線,並有一個與所需的國家和一個沒有任何國家。 MVC將確定使用哪一個。

+0

「可選參數必須遵循任何所需的參數。」我不知道這個規則,我想這回答了這個問題,謝謝 –