【问题标题】:datatable server side pagination always show 1 page数据表服务器端分页始终显示 1 页
【发布时间】:2016-11-09 16:21:33
【问题描述】:

我正在尝试实现服务器端分页,用jquerydatatable过滤。

但它总是只在页脚处创建一页。

   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);
        } 

这些是值:

draw=1,getPointUsers.Count()=5,totalCount =6

我每页显示 5 条记录。所以它应该创建 2 页。但事实并非如此。

【问题讨论】:

  • @EhsanSajjad:根据那篇文章。 totalCount 将始终是表中的总行数。和filteredCount 将是应用过滤器后的总记录数。这意味着totalcount 永远不会改变。我说的对吗?
  • 是的,你是对的

标签: c# jquery asp.net-mvc datatables


【解决方案1】:

我相信这是导致它始终为一页的行:

paginationModel.recordsFiltered = getPointUsers.Count();

您说“getPointUsers.Count()”是“5”。因此,recordsFiltered 数据项是应用了当前搜索过滤器的可用记录总数。因此,如果您的页面大小为 5,并且您的 recordsFiltered 为 5,则 DataTable 认为只有一页可用于显示当前过滤器。我不相信“recordsTotal”用于分页计算,除非“recordsFiltered”不存在。

从您的代码来看,您似乎没有应用任何过滤器,因此错误可能与您计算“totalCount”的方式有关,因为“recordsFiltered”值基于返回的数据项数。如果您不打算在 DataTable 上应用任何搜索过滤器,那么您可以对“recordsTotal”和“recordsFiltered”使用“getPointUsers.Count()”,因为它们永远不会不同。

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 2019-04-16
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2016-10-21
    • 2020-01-11
    相关资源
    最近更新 更多