1

List<List<int>>MVC3 でモデルバインダーを解析しようとして失敗するタイプがあります。私のコントローラーはそのタイプをパラメーターとして受け取り、そのように完全に入力されたリストを送信すると、機能します。

有効で適切に解析/バインドされたデータ

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

同じデータ構造をコントローラーに送信するとすぐに、今度は空の配列で、外部コレクションの解析が停止します。バインダーがチョークするいくつかのデータを次に示します。

有効な、不適切に解析された/バインドされたデータ

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

その値は にバインドされてList<List<int>>いますが、長さは 1 で、最初の項目はList<int>of です4, 5

List<List<int>>では、一部List<int>の が空のリストである場合に、モデルバインダーが 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 に答える