Asp.net-Mvc-3
將數組傳遞給 RouteValues 並讓它呈現模型綁定器友好的 url
當將一個
RouteValueDicitonary或匿名對像傳遞給 @Url.Action 方法(或其任何類似方法)時,有沒有辦法正確傳遞一個集合對象,或者IEnumerable它會生成一個與預設模型綁定器兼容的 url?例如,假設我有這樣的動作:
public ActionResult Index(ICollection<int> ids) { ...do something }在我的模板中,我做了這樣的事情:
@Url.Action("Index", routeValues:new int[]{1,2,3})目標是有一個這樣的 url 輸出:
... /index?ids=1&ids=2&ids=3但 url 輸出實際上是這樣的:
... /index?ids=System.Int[]我假設目前沒有對此的支持。如果不是,那麼我需要在 MVC 的哪個部分創建自定義處理程序或其他任何內容來覆蓋此預設功能?
不幸的是,目前沒有現有的幫助程序可以讓您生成這樣的 url。所以一種可能性是手動完成:
@(Url.Action("Index") + "?" + string.Join("&", new int[] { 1, 2, 3 }.Select(x => "ids=" + x)))或者寫一個擴展方法來封裝邏輯:
@Url.ActionWithIds("Index", new int[] { 1, 2, 3 })由於這些是整數,我們不需要 url 編碼,但如果你想對字元串集合做同樣的事情,那麼值應該正確 url 編碼。
RouteValueDictionary出於往返目的,使用模型綁定語法將數組的每個元素傳遞給 a 。int i = 0; var temprvd = arr.ToDictionary(m => String.Format("name[{0}]", i++), m => (object) m); @Url.Action("index", new RouteValueDictionary(temprvd));或連接到現有的路由值字典。
將值轉換為
object(如上所示)以確保使用正確的RouteValueDictionary建構子重載。