2012-01-30 64 views
0

我在ASP.NET MVC webapp中使用jqGrid。首次加載頁面時,頁面按鈕被禁用,並始終顯示第1頁。但是,如果我更改頁面大小,對列進行排序或執行搜索,頁面會適當更新。jqGrid不計算第一次加載頁面

我試着在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 }); 

Server代碼:

[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

如果我刪除loadonce:true,它會正確顯示,但是之後我失去了客戶端排序。 – Paul 2012-01-30 20:28:20

回答

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上的jqGrid版本here

+0

也許我的JSON數據對於jqGrid格式不正確?我在上面的問題中添加了我的服務器代碼。當我調試時,我看到「總數」值是11(這對我的數據集是正確的)。 – Paul 2012-01-30 19:35:12

+1

@Paul:如果您也包含JSON響應,那將會很好。例如,您可以使用[Fiddler](http://www.fiddler2.com/fiddler2/)捕獲HTTP流量。如果您使用ASP.NET MVC,您可以將'sidx,string sord,int page,int rows'定義爲'GetGridData'的參數,並且該方法可以聲明爲返回'JsonResult'。此外,你可以使用'i = row.ModuleName'作爲1,2,3產生錯誤的ID。你應該使用'id = row.ModuleName'。我可以推薦你另外閱讀[答案](http://stackoverflow.com/a/5501644/315935)。 – Oleg 2012-01-30 19:44:30

+0

謝謝。我對服務器代碼進行了一些更改,並添加了返回的JSON,但仍然沒有運氣。 – Paul 2012-01-30 20:17:01

相關問題