为什么使用AjaxSource和MVC的Datatables分页只返回一个页面?

时间:2011-07-21 23:51:21

标签: jquery asp.net-mvc ajax paging datatables

尝试使用指向我的控制器中的Action的AjaxSource来寻呼JQuery DataTables控件。尽管ajax调用和数据表本身工作,我无法让datatables分页控件显示多个页面。使用DataTables 1.8.1。,JQuery 1.4.1,MVC2

为了演示问题,我已经创建了一个字符串数组列表,

var data = new List<string[]>() {
                new string[] {"1", "a1", "a2", "a3"},
                new string[] {"2", "b1", "b2", "b3"},
                new string[] {"3", "c1", "c2", "c3"},
                ...
                ...
                new string[] {"39", "c1", "c2", "c3"},
                new string[] {"40", "a1", "a2", "a3"}                  
        };

我将列表分页并从我的控制器中返回

 var pagedData = data.Skip(param.iDisplayStart*param.iDisplayLength)
                     .Take(param.iDisplayLength);

        return Json(new
        {
            sEcho = param.sEcho,
            iTotalRecords = data.Count,
            iTotalDisplayRecords = pagedData.Count(),
            aaData = pagedData
        },
        JsonRequestBehavior.AllowGet);

我的DataTable是通过

构建的
    $(document).ready(function ()
    {

        $('#myDataTable').dataTable({
            "bServerSide": true,
            "sAjaxSource": "../ApplicationLog/AjaxHandler",
            "bProcessing": true,
            "sPaginationType": "full_numbers",
            "aoColumns": [
                    { "sName": "COLONE" },
                    { "sName": "COLTWO" },
                    { "sName": "COLTHREE" },
                    { "sName": "COLFOUR" }
                ]
        });
    });

这个Ajax调用调用Action并将前10行发布到我的表中,该表报告它显示“显示10个条目中的1到10个(从40个条目中过滤掉)”。

我遇到的问题是数据表上的寻呼机,它只显示按钮

'First','Previous','1','Next','Last'

即使我有四页数据要显示。如果我点击'First','Previous','Next'或'Last'中的任何一个,我的动作就不会被调用。

我错过了一些明显的东西吗?任何帮助将不胜感激。

提前致谢, 本

1 个答案:

答案 0 :(得分:3)

我过去曾遇到过这个问题。尝试设置

iTotalDisplayRecords = data.Count()

我认为它使用iTotalDisplayRecords来检查“过滤后的记录中是否有更多内容可用于页面”

在这种情况下,你告诉数据表“我的搜索返回了10条记录,共有40条,但我只想在过滤结果中显示10条”

因此,由于datatables认为只有10个已过滤的行要显示,并且您在该页面上显示这10个,所以它认为不需要进行任何分页。