JQuery DataTables .Net服务器端分页问题

Khe*_*pri 18 .net asp.net-mvc jquery datatables asp.net-mvc-2

我正在为工作中的应用程序进行错误修复工作,其中先前的开发人员(自那以后)不打算在专门用于列出数据结果的页面上对数据结果进行分页.

当然,当用户开始在IE中看到长时间运行的脚本错误时,这已经让人头疼了.这与纯粹的数据量大小相结合,使得网页几乎无用.

快进到我尝试修复它并且它们已经很好了.该站点是一个.NET MVC 2站点,它是使用DataTables在客户端上添加搜索/排序/分页功能而开发的.我刚刚使用jqGrid完成了一个类似的任务,所以认为这将是相对简单的.除了一个小问题外,它一直存在.我不能为我的生活获取生成的页面链接.

快速结果视图:

结果知道此查询中有2086条记录:

在此输入图像描述

但是不会生成分页链接.

在此输入图像描述

我的动作方法是通过返回JSON

return Json(new
              {
                 param.sEcho,
                 iTotalRecords = totalRecords,
                 iTotalDisplayRecords = filteredContracts.Count(),
                 aaData = result
              },
           JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

哪里

param.sEcho ="1",iTotalRecords = 2086,iTotalDisplayRecords = 25,aaData是要显示的数据的数组结果

为了彻底,他是数据表初始化语句:

    $("#tblToDoItems").dataTable({
        'bServerSide': true,
        'bProcessing': true,
        'sAjaxSource': '/Home/GetContractList',
        "bJQueryUI": true,
        "bAutoWidth": false,
        "bPaginate": true,
        "sPaginationType": "full_numbers",
        "iDisplayLength": 25,
    /* make the first and last columns not sortable */
        "aoColumnDefs": [
            { "bSortable": false, "aTargets": [0, -1] }
        ]
    });
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了一些阻止DataTables通过服务器端数据检索正确生成分页的设置?

Jov*_*SFT 29

您的iTotalDisplayRecords等于25,因此数据表认为服务器端只有25个合同而不需要第二个页面因为所有这些合同都已显示在当前页面上.这是一个错误 - 如果你看一下JQuery MVC教程部分服务器端分页的实现,你会看到有三个数字:

  1. iTotalRecords = allCompanies.Count()表示数据库中的所有条目(在您的案例中为2086)
  2. iTotalDisplayRecords = filteredCompanies.Count()表示与当前搜索条件匹配的记录数.如果你没有使用过滤,这个数字应该与iTotalRecords 2086相同,但在你的情况下它是25.
  3. result.Count - 这是25.这个数字不会在JSON响应中传递,因为DataTables已经知道每页应该有25个记录.

如果你把all.Count而不是result.Count放到iTotalDisplayRecords中DataTables会显示分页.iTotalDisplayRecords和iTotalRecords用于显示消息"显示iTotalDisplayRecords的1到25个(总共iTotalRecords)"

如果iTotalDisplayRecords等于25,DataTables将显示消息"显示1到25的25(总共iTotalRecords)",并假设没有第2页; 因此,将禁用分页,如您的示例所示.

约万