0

json データを mvc アクションに投稿するときに、ASP.NET MVC 4 に問題があります。

Dictionary<string, string[]>複数の名前付き配列を含む JavaScript オブジェクトを表すために を使用しました。ただし、配列値を 1 つのキーに格納する代わりに、各配列値は独自のキーを取得します。

var data = { 
    foo1: { bar1: ['a', 'b', 'c' ], bar2: ['z'] },
    foo2: { bar3: ['d', 'e' ] } 
};
$.ajax({
    url: '/mvc/SomeAction',
    type: 'POST',
    data: data,
    dataType: 'json',
    contentType: 'application/json',
    success: myCallback
});

私の MVC モデルは次のようになります。

public class Data 
{
    public Dictionary<string, string[]> foo1 { get; set; }
    public Dictionary<string, string[]> foo2 { get; set; }
}

[HttpPost]
public JsonResult SomeAction(Data data) 
{
    // Instead of having a key named bar1 with the value as an array of strings, 
    // this is what I get:
    // data.foo1 = 
    // { 
    //     (key: "bar1[0]", value: null), 
    //     (key: "bar1[1]", value: null), 
    //     (key: "bar1[2]", value: null),
    //     (key: "bar2[0]", value: null)
    // }
    // etc..
}

MVC モデル バインダーが json をデータ モデルに正しく逆シリアル化していないようです。

これは、ディクショナリの値が配列である場合にのみ発生し、それが別のオブジェクトである場合は期待どおりに機能します。

これを解決する方法についてのアイデアは大歓迎です。

最悪の場合JSON.stringify、サーバー上の文字列を使用して解析する必要がありますが、それは適切ではありません。

4

1 に答える 1

0

jQuery 用のこのプラグインを使用して、json データを変換できます。

var data = $.toDictionary({ 
    foo1: { bar1: ['a', 'b', 'c' ], bar2: ['z'] },
    foo2: { bar3: ['d', 'e' ] } 
});
于 2012-09-21T01:58:26.027 に答える