2011-09-23 80 views
18

我工作的一个bug修复,现在在工作中的应用,其中前开发(自去了)没有刻意去专门分页上市意味着页面上的数据结果输出数据结果。JQuery的数据表.NET服务器端分页问题

当然,这已经饲养它丑陋的头,因为用户已经开始看到在IE中长时间运行的脚本错误。这与纯粹的数据量相结合,使网页几乎无用。

快进到我试图修复它,而他们却非常好。该网站是一个.NET MVC 2网站,它是使用DataTables在客户端添加搜索/排序/分页功能而开发的。我刚刚用jqGrid完成了一个类似的任务,所以认为这将是相对简单的。除了一个小问题之外。我不能为我的生活获取页面链接来生成。

快速结果的看法:

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

enter image description here

但不会生成分页链接。

enter image description here

我的动作方法是通过

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

返回JSON其中

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

待处理ough,他的数据表初始化语句:

$("#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] } 
     ] 
    }); 

我失去了一些设置,将阻止数据表不能正常生成通过服务器端的数据检索分页?

回答

30

你iTotalDisplayRecords等于25,这样的数据表认为有25只在服务器端和第二页的合同是不是必要的,因为所有的人都已经在当前页面上显示。 这是COMON错误 - 如果你看看服务器端分页的JQuery MVC tutorial部分实现,你会看到有三个数字:

  1. iTotalRecords = allCompanies.Count()代表数据库中的所有条目(在您的案件2086)
  2. iTotalDisplayRecords = filteredCompanies.Count()较符合当前搜索条件的记录数。如果您没有使用过滤这个数字应该是相同iTotalRecords 2086,但在yourcase它是25
  3. result.Count - 这是25这个数字是不是在JSON响应中传递,因为数据表已经知道,有应该是每页25个记录。

如果将all.Count代替result.Count进入iTotalDisplayRecords,DataTable将显示分页。iTotalDisplayRecords和iTotalRecords用于显示消息 “显示1到25 iTotalDisplayRecords的(iTotalRecords总共)”

如果iTotalDisplayRecords等于25,数据表将显示消息“显示1到25(总共iTotalRecords)25” ,并假设没有第2页;因此,分页将被禁用,如你的例子。

Jovan

+0

感谢您的回答!这正是问题所在。 – Khepri

+0

我在做同样的事情,谢谢澄清。 – PseudoNinja

+0

我三....... – steveareeno