【问题标题】:JQuery DataTables .Net Server Side Pagination IssuesJQuery DataTables .Net 服务器端分页问题
【发布时间】:2011-11-24 00:16:00
【问题描述】:

我现在正在为工作中的应用程序进行错误修复,以前的开发人员(自从离开后)没有费心在专门用于列出数据结果的页面上对数据结果进行分页。

这当然引起了它的丑陋,因为用户开始在 IE 中看到长时间运行的脚本错误。再加上庞大的数据量,网页几乎毫无用处。

快进我尝试修复它的尝试,它们进展顺利。该站点是一个使用 DataTables 开发的 .NET MVC 2 站点,用于在客户端上添加搜索/排序/分页功能。我刚刚使用 jqGrid 完成了一项类似的任务,所以认为这将是相对简单的。除了一个小问题。我无法终生获得要生成的页面链接。

快速查看结果:

结果知道本次查询有2086条记录:

但是没有生成分页链接。

我的操作方法是通过

返回 JSON
return Json(new
              {
                 param.sEcho,
                 iTotalRecords = totalRecords,
                 iTotalDisplayRecords = filteredContracts.Count(),
                 aaData = result
              },
           JsonRequestBehavior.AllowGet);

在哪里

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

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

【问题讨论】:

    标签: jquery .net asp.net-mvc asp.net-mvc-2 datatables


    【解决方案1】:

    您的 iTotalDisplayRecords 等于 25,因此数据表认为服务器端只有 25 个合约,不需要第二页,因为它们都已显示在当前页面上。 这是一个常见的错误——如果你看一下JQuery MVC tutorial 部分服务器端分页的实现,你会看到有三个数字:

    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 用于显示消息 "显示 1 到 25 个 iTotalDisplayRecords(总共 iTotalRecords)"

    如果 iTotalDisplayRecords 等于 25,DataTables 将显示消息“Showing 1 to 25 of 25 (iTotalRecords in total)”,并假设没有第 2 页;因此,分页将被禁用,如您的示例所示。

    约万

    【讨论】:

    • 感谢您的回答!这正是问题所在。
    • 我在做同样的事情,感谢您的澄清。
    • 这仍然令人困惑,但我四个。
    • @Xaisoft 和其他可能对此仍有疑问的人:iTotalRecords - 任何过滤前的记录数(所有表行或您使用的任何数据源),iTotalDisplayRecords- 使用 LIKE 过滤后的行数, EQUALS 等,但在执行 TOP、SKIP、TAKE 等之前。
    • 感谢您的回答。我发现将 iTotalRecords 设置为数据库中记录的实际计数不是很有用,因此我更喜欢设置与 iTotalDisplayRecords 相同的值。我不想让用户知道我在数据库中有多少条记录。
    猜你喜欢
    • 2012-07-18
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2019-11-23
    • 2018-01-20
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多