コントローラー メソッド jqGrid に JS オブジェクトを渡す必要があります。このオブジェクトは「activeFilters」と呼ばれます。JSON として表されるオブジェクトは次のとおりです。
{"family":
[{
"filterDisplayName":"Performance Status",
"filterDbName":"CurrentStatus",
"filterValueList":"On Plan"
}]
}
上記を jqGrid に渡す際に問題が発生しました (詳細は後述)。しかし、Ajax を使用してコントローラーにオブジェクトを渡すことは非常に簡単です。
$.ajax({
url: myMethodPath,
type: 'POST',
dataType: 'html',
data: JSON.stringify(activeFilters),
contentType: 'application/json; charset=utf-8',
success: function (result) {
alert("success")
},
error: function () {
alert("Error:");
}
});
私のテストコントローラーメソッドは次のようになります:
[HttpPost]
public ActionResult DataTest(JsonFilterFamily activeFilters)
{
return PartialView();
}
JsonFilterFamily の構造を次のように追加します。
public class JsonFilterFamily
{
public List<FilterFamilyMember> family { get; set; }
}
public class FilterFamilyMember
{
public string filterDisplayName { get; set; }
public string filterDbName { get; set; }
public string filterValueList { get; set; }
}
上記の Ajax を使用すると、JS オブジェクトは問題なくコントローラーに送信されます。しかし、jqGridコントローラーへの呼び出しでpostDataと同じJSオブジェクトを送信する方法がわかりません。投稿データの構文が間違っているに違いありません。これが私が使用しているものです:
$("#myJqGrid").setGridParam({ postData: { family: activeFilters.family} }).trigger("reloadGrid");
しかし、コントローラが発火すると、奇妙なことが起こります。デバッガーは、family
= 1;のカウントを教えてくれます。ただし、filterDisplayName、filterDbName、filterValueList は null です。何が間違っているかについてのアイデアはありますか?