我有一个看起来像这样的动作方法:
public ActionResult DoSomething(string par, IEnumerable<string> mystrings)
我想使用Url.Action将此映射到URL,并在RouteValueDictionary中传递mystrings。但是,这只会产生一个只对应于mystrings.ToString()。
的查询字符串如何在查询字符串中传递列表? MVC 2中是否有一些支持此功能的功能?
澄清:使用GET调用action方法,而不是POST。
我的动作方法解析查询字符串DoSomething没有问题吗?mystrings = aaa&amp; mystrings = bbb
但是,我无法使用Url.Action生成此内容。传递列表会生成以下查询字符串:mystrings = system.collections.generic.list%601%5bsystem.string%5d
有什么方法可以轻松完成这个任务吗?
答案 0 :(得分:2)
IEnumerable<String>
上创建一个扩展方法,如下所示:
public static class Extensions
{
public static string ToQueryString(this IEnumerable<string> items)
{
return items.Aggregate("", (curr, next) => curr + "mystring=" + next + "&");
}
}
然后你可以像这样生成自己的查询字符串:
<%= Url.Action("DoSomething?" + Model.Data.ToQueryString()) %>
这需要一些改进,因为你应该对你的字符串进行UrlEncode并创建一个尾随的“&amp;”,但这应该给你基本的想法。
答案 1 :(得分:1)
怎么样:
<%: Html.ActionLink("foo", "DoSomething", new RouteValueDictionary() {
{ "mystrings[0]", "aaa" }, { "mystrings[1]", "bbb" }
}) %>
生成:
<a href="/Home/DoSomething?mystrings%5B0%5D=aaa&mystrings%5B1%5D=bbb">foo</a>
这不完全是您要查找的网址,但它会成功绑定到您的控制器操作。如果你想生成一个没有方括号的网址,你需要自己编写帮助方法。
答案 2 :(得分:0)
public static class Extensions
{
public static string ToQueryString(this IEnumerable<string> items)
{
if (items.Count>0)
{
var urlParam = string.Join("&", items.ToArray());
return "?"+ urlParam;
}
return "";
}
}