jqGrid在第一次加载时不计算页面

时间:2012-01-30 19:17:11

标签: jquery asp.net-mvc jqgrid

我在ASP.NET MVC webapp中使用jqGrid。首次加载页面时,寻呼机按钮被禁用并始终显示第1页的第1页。但是,如果我更改页面大小,对列进行排序或执行搜索,页面会相应更新。

我已尝试在gridComplete和loadComplete中触发reloadGrid,但两者都没有做到这一点。当我执行其他操作以使分页刷新时,会调用什么?

这是我的网格:

$(document).ready(function () {
    $('#grid').jqGrid({
        url: '@Url.Action("GetGridData", "MyController")',
        datatype: 'json',
        loadonce: true,
        mtype: 'POST',
        postData: {},
        colNames: ['Name', 'Price', 'Inventory'],
        colModel: [
            { name: 'Name', index: 'Name' },
            { name: 'Price', index: 'Price', sorttype: 'float', formatter: 'number', align: 'right' },
            { name: 'Inv', index: 'Inv', sorttype: 'int', align: 'right' }
        ],
        pager: '#gridpager',
        rowNum: 10,
        rowList: [5, 10, 20, 50, 100],
        sortname: 'Name',
        sortorder: 'asc',
        viewrecords: true,
        caption: 'Inventory',
        hidegrid: false,
        forceFit: true,
        height: 'auto',
        width: 1200
        //loadComplete: function() {     
        //    $('#grid').trigger("reloadGrid");
        //},
        //gridComplete: function () {
        //    $('#grid').trigger("reloadGrid");
        //}
    }).jqGrid('filterToolbar', { searchOnEnter: false }).jqGrid('navGrid', '#gridpager', { del: false, add: false, edit: false, search: false });

服务器代码:

[HttpPost]
public JsonResult GetGridData(string sidx, string sord, int page, int rows)
{
    List<Inventory> data = InventoryModel.GetInventory();

    var count = data.Count;

    var jsonData = new
        {
            total = (int)Math.Ceiling((double)count / rows),
            page = 1,
            records = count,
            rows = (from row in data
                    select new
                    {
                        id = row.Name,
                        cell = new object[]
                            {
                                row.Name,
                                row.Price,
                                row.Inv                         
                            }
                    }).ToArray()
        };
    return Json(jsonData);
}

JSON数据:

{
  "total":11,
  "page":1,
  "records":104,
  "rows": [ { "id":"PRODUCT-1", "cell":["PRODUCT-1",0.52,41] },
            { "id":"PRODUCT-2", "cell":["PRODUCT-2",0.43,50] },
          ... ]
}

1 个答案:

答案 0 :(得分:1)

我几乎可以肯定,原因是返回服务器的错误JSON数据。我假设服务器返回total等于1独立于rowNum,它将作为rows参数发送到服务器。重要的是要理解网格体将具有与服务器响应相同顺序的第一行rowNum(10)行。因为您使用loadonce: true,所以下一次刷新网格本地,因此它可以正常工作。无论如何,服务器应该填充正确的total参数,它应该使用提供的数据对应于jqGrid的sortnamesortorder选项。参数将以sidxsord发送到服务器。

更新:jqGrid 4.3.1中的错误原因

ts.p.lastpage = Math.min( ts.p.page, Math.ceil(len/ rn) );

应固定为

ts.p.lastpage = Math.ceil(len/ rn);

有关详细信息,请参阅我的错误报告here以及github here上的jqGrid版本中的修复程序