0

配列に[int、bool]を入力しています:

$.each(ownedChecked, function (key, val) {
    /*code to set id as int and paintedTrue as bool*/
    ownedIDs.push([id,paintedTrue]);
});

文字列化される変数を作成します。

var saveData = { OwnedListEntryIDs:ownedIDs };

//send data
$.ajax({
    url: '/ListEntry/OwnedModels',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(saveData),
    success: function (data) { alert('Update success: ' + data); },
    failure: function (data) { alert('Update failed: ' + data); }
});

ViewModelは次のとおりです。

public class OwnedPaintedSave
{
    //collection contains a ListEntryID and a bool indicating whether it is painted or not
    public Dictionary<int,bool> OwnedListEntryIDs { get; set; }
}

コントローラメソッドに入ると、ModelState.Isvalidが渡され、コードがforeachループに到達しますが、モデルは常にNULLです。

[HttpPost]
public JsonResult OwnedModels(OwnedPaintedSave models)
{
    if (ModelState.IsValid)
    {
        foreach (var id in models.OwnedListEntryIDs)
        { }
    }
}

$ .ajaxメソッドでtraditional:trueを設定しようとしましたが、同じ問題が発生します。ViewModelのディクショナリはバインドする必要があるものではないと思いますが、それがどうあるべきかわかりません。助けてくれてありがとう。

4

2 に答える 2

1

OwnedPaintedSaveオブジェクトに2つのint[]プロパティを指定しました。1つはOwnedID用で、もう1つはPaintedID用です。

于 2012-05-28T19:53:28.823 に答える
0

問題はコントローラーにあると思います。var saveData = { OwnedListEntryIDs:ownedIDs };データとして(基本的にはDictionary<int, bool>-はい?)を渡しますが、アクション結果のパラメーターはタイプですOwnedPaintedSave

コントローラのパラメータを変更しDictionary<int, bool> ownedListEntryIDs、javascriptオブジェクトを文字列化しない場合、フレームワークはオブジェクトをシリアル化および逆シリアル化するのに十分賢いと思います。だからあなたはこれを持っているでしょう...

var saveData = { OwnedListEntryIDs:ownedIDs };

//send data
$.ajax({
    url: '/ListEntry/OwnedModels',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: saveData,
    success: function (data) { alert('Update success: ' + data); },
    failure: function (data) { alert('Update failed: ' + data); }
});

そして、これはあなたのコントローラーで...

[HttpPost]
public JsonResult OwnedModels(Dictionary<int, bool> ownedListEntryIDs)
{
    if (ModelState.IsValid)
    {
        foreach (var id in ownedListEntryIDs)
        { }
    }
}
于 2012-05-28T07:09:21.313 に答える