麻烦重定向字符串[]

时间:2009-11-19 21:12:17

标签: asp.net-mvc routing routes url-routing asp.net-mvc-routing

我有一个表单可以将几个像命名元素一样发布到这样的动作:

<%= Html.TextBox("foo") %>
<%= Html.TextBox("foo") %>
<%= Html.TextBox("foo") %>

发布到并返回:

public ActionResult GetValues(string[] foo)
{
    //code

    return RedirectToAction("Results", new { foo = foo })
}

“结果”操作如下所示:

public ActionResult Results(string[] foo)
{
    //code

    return View()
}

我遇到的问题是重定向后我的网址看起来像这样:

/results?foo=System.String[]

而非预期:

/results?foo=value&foo=value&foo=value

有没有办法让我的当前设置正常工作?

2 个答案:

答案 0 :(得分:0)

尝试将参数类型从string[]更改为IEnumerable<string>

public ActionResult GetValues(IEnumerable<string> foo) { ... }

如果您仍有问题,请在表单上执行以下操作:

<%= Html.TextBox("foo[0]") %>
<%= Html.TextBox("foo[1]") %>
<%= Html.TextBox("foo[2]") %>

应该这样做。

答案 1 :(得分:0)

我找不到使用上述代码的解决方案。我最终做的是获取数组/ Enumerable,循环遍历它,并构建一个查询字符串以传递重定向。有点像:

StringBuilder queryString = new StringBuilder();
for (int i = 1; i <= foo.Count(), i++)
{
    if (i == 1)
       queryString.Append("?foo=" + value); 
    else
        queryString.Append("&foo=" + value);
}

这比我最终使用的代码简化得多,但它也允许我删除可能随表单提交的空值。清理一下。