2016-09-22 41 views
1

我正在用服務器端分頁來構建igGrid。網格掛鉤到由Visual Studio使用實體框架自動生成的OData v3控制器。篩選和排序操作正常,但分頁不是。igGrid服務器端分頁不起作用

問題似乎是網格將page = x和pageSize = y放入查詢字符串,但OData格式爲$ top = x和$ skip = y。請注意,只更改名稱頁面和pageSize是不夠的,因爲$ skip的值需要是index * pageSize。我已經嘗試了多種編輯控制器的方式來支持頁面和pageSize,但無濟於事。

我可以手動輸入具有$ top和$ skip功能的OData請求URL到我的瀏覽器的地址欄中,並獲得想要的結果。有沒有辦法讓網格使用$ top和$ skip?網格本身在c#控制器中定義,並作爲模型的一部分傳遞到頁面中,我注意到因此我無法訪問GridPaging對象的pageIndexUrlKey和pageSizeUrlKey屬性。 grid.OData設置爲true。

+2

默認情況下,頁面應該使用$ top和$ skip發送OData查詢字符串。你能發佈你的igGrid配置嗎? –

+0

GridModel grid = new GridModel(); grid.EnableUTCDates = true; grid.ID =「membersGrid」; grid.FixedHeaders = false; grid.DefaultColumnWidth =「100px」; #區域[Paging] GridPaging分頁=新GridPaging(); paging.Type = OpType.Remote; paging.PageSize = 10; paging.CurrentPageIndex = 0; paging.PageSizeList =新列表 {10,25,50,100}; grid.Features.Add(paging); #endregion grid.DataSourceUrl =「/ odata/viewMemberBalances」; grid.ResponseDataKey =「value」; grid.OData = true; –

+0

謝謝你的回覆。這是讓網格使用正確的查詢字符串參數,但仍然有兩個問題:1)當頁面第一次加載時,網格使用頁面和pageSize查詢參數進行調用,這導致顯示每個記錄直到頁面大小由用戶改變。 2)查詢字符串缺少$ inlinecount = allpages參數,因此我的控制器不會告訴網格有更多條目,並且只有1個頁面顯示給用戶。我已經確認手動將$ inlinecount = allpages添加到查詢字符串返回計數。 –

回答

1

默認情況下,Grid MVC Helper Wrapper將pageSizeUrlKeypageIndexUrlKey明確設置爲自定義查詢參數:pageSizepage。要使其發送OData參數,您應該在pageSizeUrlKeypageIndexUrlKey中設置爲null。將下面的代碼在你的頁面的底部:

$(function() { 
     $("#grid1").on("iggriddatabinding", function (evt, ui) { 
      var features = ui.owner.options.features, i; 
      for (var i = 0; i < features.length; i++) { 
       if (features[i].name === "Paging") { 
        features[i].pageSizeUrlKey = null; 
        features[i].pageIndexUrlKey = null; 
       } 
      } 
     }); 
    }); 

你應該把電網MVC配置在此之前的代碼,因爲該事件是在創建網格期間解僱,你應該綁定到它之前的網格創建。

+0

再次感謝您的回覆。更新的代碼允許網格在首頁加載時正確呈現,但是這不會將$ inlinecount = allpages添加到查詢字符串中,因此網格僅顯示結果的第一頁,並且不會提供更多內容。據我所知,這是唯一剩下的問題。 –