1

我需要将一个 JS 对象传递给我的控制器方法 jqGrid。该对象称为“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 为空。关于什么是错的任何想法?

4

1 回答 1

1

在您的控制器方法中,尝试放置:

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

TryUpdateModel是一个 MVC 控制器方法,这会将数据放入您的对象中。

于 2013-06-26T11:59:18.193 回答