1

コントローラー メソッド 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 です。何が間違っているかについてのアイデアはありますか?

4

1 に答える 1

1

コントローラーメソッドで、次を入れてみてください:

var filterFamilyMember = new FilterFamilyMember();
TryUpdateModel(filterFamilyMember);

TryUpdateModelは MVC コントローラ メソッドであり、これによりオブジェクトにデータが配置されます。

于 2013-06-26T11:59:18.193 に答える