ASP.NET MVC - 将数组对象作为 Html.ActionLink(...) 中的路由值传递

2024-01-19

我有一个返回数组 (string[]) 的方法,并且我尝试将此字符串数组传递到操作链接中,以便它将创建一个类似于以下内容的查询字符串:

/Controller/Action?str=val1&str=val2&str=val3...etc

但是当我传递 new { str = GetStringArray() } 时,我得到以下网址:

/Controller/Action?str=System.String%5B%5D

所以基本上它是采用我的 string[] 并在其上运行 .ToString() 来获取值。

有任何想法吗?谢谢!


尝试创建一个 RouteValueDictionary 来保存您的值。您必须为每个条目提供不同的密钥。

<%  var rv = new RouteValueDictionary();
    var strings = GetStringArray();
    for (int i = 0; i < strings.Length; ++i)
    {
        rv["str[" + i + "]"] = strings[i];
    }
 %>

<%= Html.ActionLink( "Link", "Action", "Controller", rv, null ) %>

会给你一个像这样的链接

<a href='/Controller/Action?str=val0&str=val1&...'>Link</a>

EDIT:MVC2 更改了 ValueProvider 接口,使我原来的答案变得过时。您应该使用具有字符串数组作为属性的模型。

public class Model
{
    public string Str[] { get; set; }
}

然后模型绑定器将使用您在 URL 中传递的值填充您的模型。

public ActionResult Action( Model model )
{
    var str0 = model.Str[0];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC - 将数组对象作为 Html.ActionLink(...) 中的路由值传递 的相关文章

随机推荐