Asp.net mvc ASP.NET MVC将列表传递到RouteData查询字符串

Asp.net mvc ASP.NET MVC将列表传递到RouteData查询字符串,asp.net-mvc,query-string,routedata,Asp.net Mvc,Query String,Routedata,作为查询字符串传递值列表的推荐方法是 www.site.com/search?value=1&value=2&value=3&value=4 ASP.NET很好地处理了这一问题: string value = QueryString.Get("value"); // returns "1,2,3,4" 但是我想不出一种方法把这些值传递到RouteData中。显而易见的方法是增加 int[] value = {1,2,3,4}; 让超级聪明的MVC帮我解决问题。不幸的

作为查询字符串传递值列表的推荐方法是

www.site.com/search?value=1&value=2&value=3&value=4
ASP.NET很好地处理了这一问题:

string value = QueryString.Get("value"); // returns "1,2,3,4"
但是我想不出一种方法把这些值传递到RouteData中。显而易见的方法是增加

int[] value = {1,2,3,4};
让超级聪明的MVC帮我解决问题。不幸的是,MVC在将数组传递到RouteData时是dump,它基本上调用.ToString()将value=int[]添加到我的QueryString中

我尝试将值添加到RouteValueDictionary(但作为一个字典无法处理此问题:)

我可以尝试这样传递值:

www.site.com/search?value=1,2,3,4
但这被编码到URL中作为

www.site.com/search?value=1%2C2%2C3%2C4
我不确定这是不是一件坏事,但看起来确实很糟糕


那么,如何在ASP.NET MVC中将值列表作为RoutedData传递呢。有什么方法可以添加到MVC中,使其处理int[]吗?或者,底层基于字典的数据结构是一个很容易将值列表传递给ASP.NET MVC的拦路虎吗?

我自己通过创建一个新类RouteDataList()想出了一个解决方案

public类RouteDataList:列表
{
公共RouteDataList(IEnumerable enumerable):基(enumerable){}
public RouteDataList():base(){}
公共重写字符串ToString()
{            
字符串输出=”;
for(int i=0;i
使用方法如下:

RouteDataList<Int32> valuelist = new RouteDataList<Int32>(){5,6,7,8};
RouteDataList<Int32> anothervaluelist = new RouteDataList<Int32>(){12,13,14,15};
RouteDataList valuelist=newroutedatalist(){5,6,7,8};
RouteDataList anothervaluelist=新RouteDataList(){12,13,14,15};
然后传递给任何采用RouteValueDictionary/匿名类型的函数:

return RedirectToAction("View", "Browse", new {valuelist, anothervaluelist } );
// Produces http://www.site.com/browse/view?valuelist=5-6-7-8&anothervaluelist=12-13-14-15

// To Parse back to a list:
List<Int32> values = RouteDataList<Int32>.ParseInts(HttpContext.Current.Request.QueryString["valuelist"]) 
返回重定向到操作(“查看”,“浏览”,新建{valuelist,另一个valuelist});
//产生http://www.site.com/browse/view?valuelist=5-6-7-8和其他值列表=12-13-14-15
//要解析回列表,请执行以下操作:
List values=RouteDataList.ParseInts(HttpContext.Current.Request.QueryString[“valuelist”])
RouteDataList<Int32> valuelist = new RouteDataList<Int32>(){5,6,7,8};
RouteDataList<Int32> anothervaluelist = new RouteDataList<Int32>(){12,13,14,15};
return RedirectToAction("View", "Browse", new {valuelist, anothervaluelist } );
// Produces http://www.site.com/browse/view?valuelist=5-6-7-8&anothervaluelist=12-13-14-15

// To Parse back to a list:
List<Int32> values = RouteDataList<Int32>.ParseInts(HttpContext.Current.Request.QueryString["valuelist"])