2016-11-09 107 views
1

我試圖實現服務器端分頁,與jquerydatatable篩選。datatable服務器端分頁始終顯示1頁

但它總是隻在頁腳創建一個頁面。

public JsonResult UserList(int draw, int length, int start) 
     { 
      PaginattionModel<PointUserModel> paginationModel = new PaginattionModel<PointUserModel>() 
      { 
       draw = draw 
      }; 
       int sortColumn = -1; 
       string sortDirection = "asc"; 
       if (Request.Form["order[0][column]"] != null) 
       { 
        sortColumn = int.Parse(Request.Form["order[0][column]"]); 
       } 
       if (Request.Form["order[0][dir]"] != null) 
       { 
        sortDirection = Request.Form["order[0][dir]"]; 
       } 
       int totalCount = 0; 
       PointUserFilter pointUserFilter = new PointUserFilter() 
       { 
        PageSize = length, 
        PageNumber = start, 
        SortDirection = sortDirection, 
        SortColumnNo = sortColumn 
       }; 
       var getPointUsers = pointUserBl.GetPointUsers(pointUserFilter, out totalCount); 
       paginationModel.data = getPointUsers; 
       paginationModel.recordsFiltered = getPointUsers.Count(); 
       paginationModel.recordsTotal = totalCount; 
       return Json(paginationModel, JsonRequestBehavior.AllowGet); 
     } 

這些是值:

平局= 1,getPointUsers.Count()= 5,TOTALCOUNT = 6

我顯示5個記錄每頁。所以它應該創建2頁。但事實並非如此。

+0

看看:http://www.codeproject.com/Articles/1118363/GridView-with-Server-Side-Filtering-Sorting-and-Pa –

+0

@EhsanSajjad:那麼根據那篇文章。 'totalCount'將始終是表中行數的總和。並且'filteredCount'在應用過濾器後將是全部的記錄數。這意味着'totalcount'永遠不會改變。 我對不對? –

+0

是的,你是對的 –

回答

0

我相信這是導致它始終是一個網頁行:

paginationModel.recordsFiltered = getPointUsers.Count(); 

你說的「getPointUsers.Count()」是「5」。因此recordsFiltered數據項是應用了當前搜索過濾器的可用記錄總數。因此,如果您的頁面大小爲5,並且您的recordsFiltered爲5,則DataTable認爲只有一個頁面可用於顯示當前過濾器。我不相信「recordsTotal」用於分頁計算,除非「recordsFiltered」不存在。

從你的代碼看起來你並沒有使用任何過濾器,所以錯誤很可能是你計算「totalCount」的方式,因爲「recordsFiltered」值是基於返回多少數據項。如果您不打算在DataTable上應用任何搜索過濾器,那麼您可以將「getPointUsers.Count()」用於「recordsTotal」和「recordsFiltered」,因爲它們決不會有所不同。