2013-12-09 41 views
0

這是我的網址的格式:如何在ASP.NET MVC中創建具有多個空參數的路由?

controller/action/p1/p2/p3/ 

在路由我有這樣的規則:

url: 
    {controller}/{action}/{p1}/{p2}/{p3}/ 
defaults: 
    new { controller = "controller", action = "action", p1= "", p2= "", p3= "" } 

在控制器中,我有:

action(p1 = "", p2 = "", p3 = "") 
{ 
    ... 
} 

我需要通過這個網址controller/action//p2/p3/其中p1 = ""問題在於,在動作方法中如果p1 = ""默認值爲p2。我的意思是p1現在需要p2的價值。

我怎麼能得到這個工作?也許如果我添加更多的路線,或者是否有另一種解決方法來完成在空參數之間傳遞?

+0

p1,p2或p3是否有任何不同的模式,以便區分它們?也許p1是數字,p2是一個字符串,也許p3以「category」開始,等等。 –

+0

你能提供一個這些參數和值的例子嗎? – rae1

回答

0

假設所有p都是字符串,區分單獨路線的唯一方法是參數個數。因此,爲了實現以下映射:

controller/action/p2/p3/ 

您可以通過添加以下映射前的一個有三個參數做到這一點:

url: 
    {controller}/{action}/{p2}/{p3}/ 
defaults: 
    new { controller = "controller", action = "action", p2= "", p3= "" } 

不過,與相同數量的參數玩耍,它們映射不同而不使用查詢字符串參數是無法實現的,例如:

controller/action?p1=""&p3="" 
0

您可以多種組合與空屬性的鏈接,喜歡這裏:

 var defaultObj = new { controller = "controller", action = "action", p1 = UrlParameter.Optional, p2 = UrlParameter.Optional, p3 = UrlParameter.Optional }; 

     string[] combinations = { 
      "{controller}/{action}/{p1}/{p2}/{p3}", 
      "{controller}/{action}//{p2}/{p3}", 
      "{controller}/{action}/{p1}//{p3}", 
      "{controller}/{action}/{p1}/{p2}/", 
     }; 

     for (int i = 0; i < combinations.Length; i++) 
     { 
      routes.MapRoute(
       name: "route" + i.ToString(), 
       url: combinations[i], 
       defaults: defaultObj 
      ); 
     } 

不是最好的解決方案,但爲我工作。