我在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] },
... ]
}
答案 0 :(得分:1)
我几乎可以肯定,原因是返回服务器的错误JSON数据。我假设服务器返回total
等于1独立于rowNum
,它将作为rows
参数发送到服务器。重要的是要理解网格体将具有与服务器响应相同顺序的第一行rowNum
(10)行。因为您使用loadonce: true
,所以下一次刷新网格本地,因此它可以正常工作。无论如何,服务器应该填充正确的total
参数,它应该使用提供的数据对应于jqGrid的sortname
和sortorder
选项。参数将以sidx
和sord
发送到服务器。
更新:jqGrid 4.3.1中的错误原因
行
ts.p.lastpage = Math.min( ts.p.page, Math.ceil(len/ rn) );
应固定为
ts.p.lastpage = Math.ceil(len/ rn);