当前位置:  开发笔记 > 后端 > 正文

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

如何解决《ASP.NETMVC-将数组对象作为Html.ActionLink()中的路由值传递》经验,为你挑选了1个好方法。

我有一个返回数组(string [])的方法,我试图将这个字符串数组传递给一个Action Link,这样它就会创建一个类似于的查询字符串:

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

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

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

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

有任何想法吗?谢谢!



1> tvanfosson..:

尝试创建一个包含值的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 ) %>

会给你一个像这样的链接

Link

编辑:MVC2更改了ValueProvider接口,使我原来的答案过时了.您应该使用带有字符串数组的模型作为属性.

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

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

public ActionResult Action( Model model )
{
    var str0 = model.Str[0];
}


@tvanfosson:我相信是的,是的.将`new {foo = new [] {"a","b"}}`等路由数据传递给`Html.ActionLink`,`Url.Action`,`HtmlHelper.GenerateLink`等任何一个都会产生一个查询字符串参数如`?foo = System.String%5B%5D`,而不是预期的`?foo = a&foo = b`.如果指定html属性,会得到不同的结果吗?
模型绑定不是问题.当`RouteValueDictionary`值包含数组/列表/等时,MVC 2似乎仍然生成查询字符串,如`?str = System.String%5B%5D`.还是没办法吗?
推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有