配列に[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のディクショナリはバインドする必要があるものではないと思いますが、それがどうあるべきかわかりません。助けてくれてありがとう。