2

JSON「コレクション」を MVC3 コントローラーに送信しようとしています。着信オブジェクトが配列の場合、以前はかなり簡単にこれを実行しましたが、この例では配列はありません (ネストされた {} が「配列」でない限り)

FormCollection、 、およびその他のさまざまなモデル構成も試しましたDictionary<string, FooBar[]>が、常に null です。

ファンシーなjson-binder-thingが機能しない原因は何ですか?

ありがとう。

JSON オブジェクトの構築

function getJson() {
    var foobars = {};

    foobars["FooBar1"] = { "Foo": "baz1", "Bar": 1 };
    foobars["FooBar2"] = { "Foo": "baz2", "Bar": 2 };
}

getJson() は、この Json オブジェクトを生成します

{
    "FooBar1" : 
    {
        "Foo":"baz1", 
        "Bar":1
    },
    "FooBar2" : 
    {
        "Foo":"baz2", 
        "Bar":2
    }
}

モデル

public class FooBarModel
{
    public FooBar[] FooBars { get; set; }
}

public class FooBar
{
    public string Foo { get; set; }
    public int Bar { get; set; }
}

コントローラ

[HttpPost]
public void ParseFooBars(FooBarModel model)
{
    //model is null
}

jQuery アヤックス

$.ajax({
    url: "MyController/ParseFooBars",
    data: JSON.stringify(getJson()),
    type: "POST",
    dataType: "json",
    //contentType: "application/json; charset=utf-8",
    contentType: "application/json",
    success: function () {

    },
    error: function () {

    }
});
4

2 に答える 2

0

jsonに「Bar」、モデルに「Baz」がありますが、タイプミスですか?
そうでない場合、これがマッピングの失敗の原因である可能性があります。

もう 1 つの理由は、デフォルトのモデル バインディングです。IEnumerable<> では正しく動作しますが、配列でも動作するかどうかはわかりません。FooBarModel のカスタム モデル バインダーを試してみることをお勧めします。

于 2012-12-05T22:49:08.923 に答える
0

最初の質問 - 正しいコントローラーを叩いていると確信していますか? デバッガーを使用してステップ実行すると、これが確認されます。それに気付かずに何度も後ろから噛まれました。

次に、配列ではなく辞書を送信しているように見えます。JSON には名前付きインスタンスのコレクションがありますが、コントローラーには名前のないインスタンスの配列が必要です。JSON を次のように変更した場合、動作しますか?:

function getJson() {
    var foobars = [];

    foobars.push({ "Foo": "baz1", "Bar": 1 });
    foobars.push({ "Foo": "baz2", "Bar": 2 });
    return foobars;
}
于 2012-12-05T23:24:25.263 に答える