将数组作为postData参数发送

时间:2012-01-13 15:43:30

标签: jquery jqgrid jqgrid-asp.net

本周我刚开始使用jqGrid。我正在尝试创建一个泛型函数,我可以调用它来加载一个带有不同postData参数的jqGrid,在函数调用中定义。

有没有办法做到这一点?我考虑的是创建一个数组来存储参数的名称/值,然后将其设置为postData中的参数。然后,Web服务将通过并将这些参数添加到SQL存储过程调用。

以下是通用代码:

var paramArray = new Array();
var p1 = new JQGridParam("CustomerName","John");
var p2 = new JQGridParam("ProductName","Kleenex");
var p3 = new JQGridParam("YearPurchased","2012");

paramArray[0] = p1;
paramArray[1] = p2;
paramArray[2] = p3;

$("#list").jqGrid({
     datatype: "json",
     url: "services/Customers.asmx/GetCustomerData",
     mtype: "POST",
     postData: {
         sqlParams: paramArray         //HERE IS WHERE I NEED THE HELP
     },
     ajaxGridOptions: { contentType: "application/json; charset=utf-8" },
     ajaxRowOptions: { contentType: "application/json; charset=utf-8" },
     serializeGridData: function (postData) {
                  return JSON.stringify(postData);
     },
     serializeRowData: function (postData) {
                  return JSON.stringify(postData);
     },
     jsonReader: {
         root: function (obj) { return obj.d.rows; },
         page: function (obj) { return obj.d.page; },
         total: function (obj) { return obj.d.total; },
         records: function (obj) { return obj.d.records; },
     },
     colModel: [
         {name: "CustID", index: "CustID" },
         {name: "PurchaseAmount", index: "PurchaseAmount" }],
     colNames: ["Customer ID", "Amount Purchased"],
     pager: $("#pager"),
     loadOnce: true,
     rowNum: 10,
     rowList: [10,25,50],
     gridview: true,
     viewrecords: true
});

当我尝试这个时,它会抛出错误“无法将System.String类型的对象转换为System.Array类型”。任何人都有任何想法如何去做?

2 个答案:

答案 0 :(得分:3)

JSON将数组字符串化。

JSON.stringify(paramArray);

然后在您的Web服务中将JSON数据强制转换回您的对象。

答案 1 :(得分:0)

JSON.stringify对我来说不适用于使用带C#的MVC .NET。相反,我只是将表单序列化并将数据作为URL的一部分发送:

 $("#myGrid").jqGrid({
       url: '<%=Url.Action("MyControllerMethod", "MyController") %>' + 
            '?' + $('#myForm').serialize(),

我将mtype保留为“POST”以解决此问题。使用postData,我能够获得单独的数字或字符串绑定,但不是数组。此解决方法将允许您使用C#MVC的数组。