JQuery DataTables .Net Server Pagination Проблемы со страницей - PullRequest
18 голосов
/ 24 сентября 2011

Сейчас я работаю над исправлением ошибки для приложения на работе, где предыдущий разработчик (с тех пор как он ушел) не удосужился разбить результаты на странице, предназначенной специально для вывода результатов.

Это, конечно, подняло уродливую голову, так как пользователи начинают видеть длительные ошибки скриптов в IE. Это в сочетании с огромным объемом данных делает веб-страницы практически бесполезными.

Перенесемся в мои попытки исправить это, и все прошло довольно хорошо. Сайт представляет собой сайт .NET MVC 2, который был разработан с использованием DataTables для добавления функциональности поиска / сортировки / подкачки на клиенте. Я только что выполнил аналогичную задачу, используя jqGrid, поэтому решил, что это будет относительно просто. И это было, за исключением одной маленькой проблемы. Я не могу за всю жизнь получить ссылки на страницы для генерации.

Быстрый просмотр результатов:

Результаты знают, что в этом запросе 2086 записей:

enter image description here

Но ссылки на страницы не генерируются.

enter image description here

Мой метод действия возвращает 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 правильно генерировать нумерацию страниц через поиск данных на стороне сервера?

1 Ответ

29 голосов
/ 26 сентября 2011

Ваш iTotalDisplayRecords равен 25, поэтому таблицы данных считают, что на стороне сервера есть только 25 контрактов, и вторая страница не нужна, поскольку все они уже показаны на текущей странице.Это общая ошибка - если вы посмотрите на раздел JQuery MVC Внедрение подкачки на стороне сервера, вы увидите, что существует три числа:

  1. iTotalRecords = allCompanies.Count (), представляющий все записи в базе данных (в вашем случае 2086)
  2. iTotalDisplayRecords = FilterCompanies.Count (), представляющий количество записей, соответствующих текущему условию поиска.Если вы не использовали фильтрацию, это число должно совпадать с iTotalRecords 2086, но в вашем случае это 25.
  3. result.Count - это 25. Это число не передается в ответе JSON, поскольку DataTables ужезнает, что на странице должно быть 25 записей.

Если вы поставите all.Count вместо результата. Счет в iTotalDisplayRecords DataTables покажет подкачку.iTotalDisplayRecords и iTotalRecords используются для отображения сообщения «Показано от 1 до 25 iTotalDisplayRecords (всего iTotalRecords)» *

Если iTotalDisplayRecords равно 25, в DataTables будет отображаться сообщение «Показано от 1 до 25 из 25 (всего iTotalRecords)"и предположим, что страницы 2 нет;следовательно, пейджинг будет отключен, как в вашем примере.

Jovan

...