本周我刚开始使用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类型”。任何人都有任何想法如何去做?
答案 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的数组。