jqGrid:如何将复杂的javascript对象作为postData传递给ASP MVC控制器方法

时间:2012-05-08 16:45:01

标签: json jqgrid asp.net-mvc

我需要将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为null。关于什么是错的任何想法?

1 个答案:

答案 0 :(得分:1)

在你的控制器方法中,尝试输入:

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

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