【问题标题】:Why wont the MVC3 modelbinder parse List<List<int>> with empty List<int>'s in it?为什么 MVC3 modelbinder 不解析 List<List<int>> 中的空 List<int>?
【发布时间】:2012-05-03 20:09:41
【问题描述】:

我有一种List&lt;List&lt;int&gt;&gt;,我试图让MVC3 中的modelbinder 解析它并失败。我的控制器将该类型作为参数,当我像这样发送完全填充的列表时,它可以工作。

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

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

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

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

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

该值绑定到 List&lt;List&lt;int&gt;&gt;,但它的长度为 1,第一项是 List&lt;int&gt;4, 5

那么,当某些List&lt;int&gt; 是空列表时,如何让模型绑定器接受List&lt;List&lt;int&gt;&gt;?我需要上面显示的“有效、未正确解析/绑定”的数据才能工作。

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

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

【问题讨论】:

    标签: c# asp.net-mvc json asp.net-mvc-3 model-binding


    【解决方案1】:

    这必须只是模型绑定器中的实现细节或实现错误。如果您为空的List&lt;int&gt; 传递null 而不是[],它将正常工作。

    此解决方法的一个奇怪细节是null 值被转换为空List&lt;int&gt; 的值!

    如果你发送

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

    那么您的List&lt;List&lt;int&gt;&gt; 中的项目将是:

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

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

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

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

    而不是

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

    有趣。

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多