1

我有一种类型List<List<int>>,我试图让 MVC3 中的模型绑定器解析并且它失败了。我的控制器将该类型作为参数,当我像这样发送完全填充的列表时,它可以工作。

有效的、正确解析/绑定的数据

[ [ 22, 12, 9 ], [1, 2, 3], [5] ]

一旦我将相同的数据结构发送到控制器,但这次是一个空数组,它就会停止解析外部集合。这是活页夹窒息的一些数据:

有效的、不正确的解析/绑定数据

[ [ 4, 5], [], [6, 7] ]

该值绑定到 a List<List<int>>,但它的长度为 1 并且第一项是 aList<int>4, 5

List<List<int>>那么,当某些List<int>' 是空列表时,如何让 modelbinder 接受 a ?我需要上面显示的“有效的、未正确解析/绑定的”数据才能工作。

更糟糕的是,没有绑定错误ModelState

如果这很重要,这也将作为 JSON 发送到控制器(通过application/json)。我想如果这是一个错误,它可能特定于那个 json 模型绑定器。

4

1 回答 1

0

这必须只是模型绑定器中的实现细节或实现错误。如果您通过null而不是[]为您的空List<int>的,它会正常工作。

此解决方法的一个奇怪细节是这些null值被转换为空List<int>的!

如果你发送

[ [ 4, 5], null, [6, 7] ]

那么您的List<List<int>>遗嘱中的项目是:

 [0] = List<int> {4, 5}
 [1] = List<int> {}
 [2] = List<int> {6, 7}

我仔细检查了,索引1绝对是一个空列表,您可以访问它的计数等。

此外,MVC 中的默认 Json 序列化程序会将该列表序列化为

[ [ 4, 5], [], [6, 7] ]

代替

[ [ 4, 5], null, [6, 7] ]

乐趣。

于 2012-05-03T20:10:07.227 回答