Отправить массив как параметр postData - PullRequest
3 голосов
/ 13 января 2012

Я только начал работать с jqGrid на этой неделе. Я пытаюсь создать универсальную функцию, которую я могу вызвать, чтобы загрузить jqGrid с различными параметрами postData, определенными в вызове функции.

Есть ли способ сделать это? Я рассмотрел создание массива для хранения имени / значения параметра, а затем установил его в качестве параметра в postData. После этого веб-служба добавит эти параметры в вызов хранимой процедуры 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 ]

3 голосов
/ 14 января 2012

JSON преобразует массив в массив.

JSON.stringify(paramArray);

Затем в вашем веб-сервисе приведите данные JSON обратно к вашему объекту.

0 голосов
/ 13 августа 2014

JSON.stringify не работал для меня, используя MVC .NET с C #. Вместо этого я просто сериализовал форму и отправил данные как часть URL:

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

Я оставил mtype как "POST" для этого обходного пути. Используя postData, я смог получить отдельные числа или строки, которые связывались просто отлично, но не массивы. Этот обходной путь позволит вам использовать массивы с C # MVC.

...