好的,我将服务器端代码更改为
int nm = objects.ToList().Count;
if (objects.ToList().Count > 0)
return new PagedList(objects, nm, 1, 25, null);
else return null;
json改为
{ “d”:{ “总”:15, “页”:1, “记录”:366, “行”:[{ “ID”: “34324”, “LastDateChange”:“/日期(1391464800000 )/”, “DateLoad”: “/日期(1391464800000)/” ..., “AName”: “FG”}], “用户数据”:空}}
客户端
$("#table").jqGrid({
url: '/WebSrv.asmx/GetSaleObjects',
datatype: 'json',
mtype: 'POST',
loadonce: true,
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData) {
},
viewrecords: true,
sortable: true,
gridview: true,
multisort: true,
height: 'auto',
width: 'auto',
pager: "#pgrf",
autowidth: true,
pagination: true,
jsonReader: {
root: "d.rows",
page: "d.page",
total: "d.total",
records: "d.records"
}
....
});
但网格是空的!不要理解;(可能是样品?
答案 0 :(得分:0)
您似乎将非常老的示例作为解决方案的模板。例如,已在3.5版中弃用了imgpath
选项(请参阅the documentation)。所以你使用了为5年前版本的jqGrid创建的模板。
您的代码中的另一个重要错误是在ASMX Web服务方法中使用手动JSON序列化。您应该从Newtonsoft.Json.JsonConvert.SerializeObject
删除GetSaleObjects
来电。该方法应返回PagedList
个对象或仅Object
。顺便说一句,如果使用objects
,您可以返回objects.ToList()
(或new PagedList(objects, objects.ToList().Count, 1, objects.ToList().Count)
)而不是loadonce: true
,因为jqGrid 会忽略page
,{{1 records
的情况下,{}}和total
部分服务器响应。
了解当前代码将结果序列化为JSON 两次非常重要。因此,您必须在loadonce: true
的{{1}}句柄内拨打JSON.parse
。例如,如果您有一个success
对象,那么第一个到JSON的序列化会产生类似
$.ajax
ASP.NET序列化另外返回的结果。因此,将返回值修改为字符串
new PagedList(...)
正确的JSON字符串({"total":1,"page":1,"records":350,"rows":[...]}
)的反序列化将在客户端生成具有属性"{\"total\":1,\"page\":1,\"records\":350,\"rows\":[...]}"
,{"total":1,"page":1,"records":350,"rows":[...]}
等的对象。另一方面,错误字符串(total
)的反序列化产生字符串,其中包含文本rows
。只有在应用{\"total\":1,\"page\":1,\"records\":350,\"rows\":[...]}
或{"total":1,"page":1,"records":350,"rows":[...]}
的其他来电时,才会需要对象。