从查询字符串ASP.NET MVC获取Dictionary <int,int [] =“”>

时间:2018-09-26 11:45:11

标签: c# asp.net asp.net-mvc dictionary query-string

我的操作方法中有一个参数:Dictionary<int, int[]> prop,并且我正在尝试通过查询字符串进行设置。但是当我使用这个时:

/Action?prop[0].Key=123&prop[0].Value[0]=123

字典参数不为null,但没有元素。

我在做什么错了,我应该怎么做?

注意:这是一个页面,所以它是一个没有主体的HTTP GET请求。

2 个答案:

答案 0 :(得分:0)

根据您的模型,可能需要自定义ModelBinder。有关更多信息,请参见Microsoft Reference

自定义modelbinder可让您决定URL查询参数的外观。例如,您可以构建一个看起来像这样的东西:

/Action?dict=(1;1,2,3)(17;90,16,12345)(88;1,2,5,7,8,9,3,4,5,6,7,8,9)

除了看起来更好并且不浪费您的实现细节之外,这还意味着您不必担心空间不足。由于大多数浏览器都不支持超过4000个字符的URL,因此,如果您的词典较大,则每次重复使用变量名在URL占用空间方面都是很昂贵的。

答案 1 :(得分:0)

使用[FromUri]属性将参数标记为MVC控制器操作,如下所示: public HttpResponseMessage ActionName([FromUri] Dictionary<int, int[]> prop) { ... } 在请求URI中,如下添加字典: /actionName?prop[0].key=0&prop[0].value=11&prop[0].value=12&prop[1].key=1&prop[1].value=21&prop[1].value=22

这将导致prop字典的填充如下: `     道具:     {         0:[11,12],         1:[21,22]     }

`