2012-09-11 49 views
2

我有一個搜索表單,其中包含返回日曆的頁面。在頂部,我有一些搜索條件,如果它只有一個值,但它不是一個列表,它都可以正常工作。當我想建立的URL,在我的模型下個月我有這樣的事情:使用列表或數組在MVC3中構建查詢字符串

public ActionResult GetUrl() 
    { 
     var action = GetBaseAction(); 
     if (SelectedDivisions.Any()) action.AddRouteValue("SelectedDisions", SelectedDivisions.ToArray()); 
     if (RoomId.HasValue) action.AddRouteValue("RoomId", RoomId.Value); 
     if (TeacherId.HasValue) action.AddRouteValue("TeacherId", TeacherId.Value); 
     if (Month.HasValue) action.AddRouteValue("Month", Month.Value); 
     if (Year.HasValue) action.AddRouteValue("Year", Year.Value); 
     if (Day.HasValue) action.AddRouteValue("Day", Day.Value); 

     return action; 
    } 

至極添加參數到下個月網址:

http://afi.local/coursesession/calendar?Month=9&Year=2012&Day=18&ViewType=weekly

,但因爲你可以選擇一個以上的分部,它的複選框的列表,所以當我發表我的形式,我得到這個網址:

http://afi.local/coursesession/calendar?Month=9&Year=2012&Day=18&ViewType=weekly&SelectedDivisions=1&SelectedDivisions=2

問題是,如果我添加2次相同的鍵它會拋出一個異常,我不知道如何重建我的URL與查詢字符串中的多個部門。

感謝您的幫助!

回答

0

我在這裏找到了解決方案:https://stackoverflow.com/a/717732/245836

Basicly我做的是這樣的:

var routeValues = new RouteValueDictionary(); 
      for (var i = 0; i < SelectedDivisions.Count; i++) 
      { 
       routeValues["SelectedDivisions[" + i + "]"] = SelectedDivisions[i]; 
      } 
      action.AddRouteValues(routeValues); 

,並將所得的網址是不是很乾淨,但綁定工作正常:

http://afi.local/coursesession/calendar?SelectedDivisions%5B0%5D=1&SelectedDivisions%5B1%5D=2&SelectedDivisions%5B2%5D=3&Month=9&Year=2012&Day=11&ViewType=weekly

所以現在我可以複製粘貼該網址,它將適用於我的日曆中的任何搜索。

0

的string.join可能是一個選項:

String.Join(",", SelectedDivisions.ToArray()) 
+1

它是'String.Join(「,」,SelectedDivisions.ToArray())' –

+0

您的結果URL是http://afi.local/coursesession/calendar?SelectedDivisions = 1,2&Year = 2012&Month = 9&Day = 18&RoomId =&TeacherId =&Status =&ViewType =每週這不起作用 – VinnyG

1

這是一個可能的重複:

how may i add integer list to route

簡短的回答是:你不能使用助手。你必須手工製作它。

+0

有趣但我正在使用ActionResult,所以我不能在後端部分執行Url.Action ...似乎我將不得不改變周圍的事情。 – VinnyG

相關問題