12

我有一个字符串数组,我需要在 Url.Action 的查询字符串中传递这些字符串。

Url.Action("Index", "Resource", new { FormatIds = Model.FormatIDs})

现在该链接在我的浏览器中显示为 System.String[] 而不是查询字符串。是否可以让 MVC 使用模型绑定自动执行此操作?

我需要它与我的控制器操作绑定,例如:

public ActionResult Index(string[] formatIDs)
4

3 回答 3

10

要使用默认活页夹获取要自动绑定的字符串列表,您需要将它们提供为:

name=value&name=value2&name=value3

因此,您需要将列表转换为:

Index?formatIDs=1&formatIDs=2&formatIDs=3
于 2012-12-14T23:28:02.397 回答
8

要使用默认模型绑定器,您应该最终得到如下内容:

Index?formatIDs=value1&formatIDs=value2&formatIDs=value3

即使文档说它是使用 ParseQueryString 实用程序的 NameValueCollection,您也可以返回一个名为 HttpValueCollection 的私有集合。然后手动添加键,HttpValueCollection 为您进行编码。然后只需手动附加 QueryString :

var qs = HttpUtility.ParseQueryString(""); 
new string[] { "value1", "value2", "value3" }.ToList().ForEach(x => qs.Add("formatIDs", x));

Url.Action("Index", "Resource")?@qs
于 2013-03-27T23:19:04.637 回答
0

还有另一种使用带有数组的 RouteValueDictionary 的方法:

@{
   var parameters = new RouteValueDictionary();

   for (var i = 0; i < Model.CustomList.Count; ++i)
   {
       parameters.Add($"customListId[{i}]", Model.CustomList[i]);
   }
}

用法:

var url = '@Html.Raw(Url.Action("ControllerActioon", "Controller", parameters))';

仍然不是很优雅 - 但工作。

于 2017-05-30T12:26:08.453 回答