我如何解决jqGrid排序问题,分页?

时间:2014-02-05 08:36:27

标签: c# javascript jquery asp.net jqgrid

好的,我将服务器端代码更改为

  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"
   }
 ....
   }); 

但网格是空的!不要理解;(可能是样品?

1 个答案:

答案 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":[...]}的其他来电时,才会需要对象