0

私は次のようなjsオブジェクトビルドを持っています:

    var entity = new Object();
    entity["1"] = Property1.GetValue();
    entity["2"] = Property2.GetValue();
    entity["3"] = Property3.GetValue();
    entity["4"] = Property4.GetValue();
    entity["5"] = Property5.GetValue();
    entity["6"] = Property6.GetValue();
    entity["7"] = Property7.GetValue();
    entity["8"] = Property8.GetValue();
    entity["9"] = Property9.GetValue();
    entity["10"] = Property10.GetValue();
    entity["11"] = Property11.GetValue();
    entity["12"] = Property12.GetValue();
    entity["13"] = Property13.GetValue();
    entity["14"] = Property14.GetValue();
    entity["15"] = Property15.GetValue();

そして、私は次のように投稿しています:

    var data = JSON.stringify(
    {
        entityID: 1,
        data: entity
    });
    $.ajax({ 
            type: "POST",
            url: "/Entity/Update",
            data: data, 
            contentType: "application/json", 
            traditional: true,
            success: function (data) { 
                alert("koko");
            },
            error:function (xhr, ajaxOptions, thrownError) { 
                alert(xhr.status); 
                alert(ajaxOptions); 
                alert(thrownError); 
            }
    }); 

投稿はありますが、MVC コントローラーはデータ パラメーターの null パラメーターを取得します。

MVC メソッド:

    public void Update(int entityID, IDictionary<string, object> data)

問題は、値が文字列や整数だけでなく、さまざまな型になる可能性があることです。それが問題です。デフォルトのモデル バインダーにオブジェクトを適切に読み取らせる方法はありますか、それともカスタム モデル バインダーを作成する必要がありますか?

4

1 に答える 1

0

MVC3で機能しない理由(デシリアライズに何か問題がありますか?)については詳しく説明しませんでしたが、MVC4で確認しました-すべてが完全に機能します。

MVC4に切り替えることができない場合は、dataオブジェクトをリファクタリングすることをお勧めします。あなたの例があなたの実際の問題にどれほど近いかはわかりませんが、辞書の代わりに配列を使用することができます-いずれの場合でも、辞書のキーはインデックスです...

したがって、MVC3では以下が機能します。

var entity = [
    Property1.GetValue(),
    Property2.GetValue(),
    Property3.GetValue(),
    Property4.GetValue()
];

public void Update(int entityID, List<object> data)

PropertyN.GetValue()その記事をチェックした結果として非プリミティブ型を使用することについては、http: //www.dalsoft.co.uk/blog/index.php/2012/01/10/asp-net-mvc-3-improved-jsonvalueproviderfactory -using-json-net /

dynamicこの記事の手法では、カスタムJSONオブジェクトをC#タイプとして逆シリアル化できます。したがって、アクションメソッドの次のシグネチャがあります。

public void Update(int entityID, IDictionary<string, dynamic> data)
于 2012-08-12T20:11:39.973 に答える