2011-09-23 30 views
18

Tôi đang sửa lỗi ngay bây giờ cho một ứng dụng tại nơi làm việc mà nhà phát triển trước (kể từ khi mất) không bận tâm phân trang kết quả dữ liệu trên trang có ý nghĩa cụ thể cho danh sách ra kết quả dữ liệu.Dữ liệu JQuery Các vấn đề về phân trang bên máy chủ

Điều này tất nhiên đã nuôi dưỡng đầu xấu xí của nó khi người dùng bắt đầu thấy các lỗi tập lệnh chạy dài trong IE. Điều này, kết hợp với kích thước khối lượng dữ liệu tuyệt đối, làm cho các trang web gần như vô dụng.

Tua nhanh các nỗ lực của tôi để khắc phục sự cố và chúng đã hoạt động khá tốt. Trang web này là trang web .NET MVC 2 được phát triển bằng cách sử dụng DataTables để thêm chức năng tìm kiếm/sắp xếp/phân trang trên máy khách. Tôi chỉ cần hoàn thành một nhiệm vụ tương tự bằng cách sử dụng jqGrid để figured điều này sẽ được tương đối thẳng về phía trước. Và nó đã được ngoại trừ một vấn đề nhỏ. Tôi không thể cho cuộc sống của tôi nhận được các liên kết trang để tạo ra.

Một nhanh chóng kết quả xem:

Kết quả biết rằng có 2086 bản ghi trong truy vấn này:

enter image description here

Nhưng liên kết phân trang không được tạo ra.

enter image description here

phương pháp hành động của tôi là trở về JSON qua

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

nơi

param.sEcho = "1", iTotalRecords = 2086, iTotalDisplayRecords = 25, và aaData là kết quả mảng dữ liệu để hiển thị

To be thor ough, anh ta tuyên bố khởi tạo DataTable:

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

Am tôi thiếu một số thiết lập đó sẽ ngăn chặn DataTables từ tạo đúng pagination qua hồi dữ liệu phía máy chủ?

Trả lời

30

iTotalDisplayRecords của bạn bằng 25, vì vậy dữ liệu có thể cho rằng chỉ có 25 hợp đồng ở phía máy chủ và trang thứ hai là không cần thiết vì tất cả chúng đã được hiển thị trên trang hiện tại. Đây là sai lầm comon - nếu bạn có một cái nhìn tại JQuery MVC tutorial phần Thực hiện server-side phân trang, bạn sẽ thấy rằng có ba con số:

  1. iTotalRecords = allCompanies.Count() đại diện cho tất cả các mục trong cơ sở dữ liệu (trong trường hợp của bạn 2086)
  2. iTotalDisplayRecords = filtrationCompanies.Count() đại diện cho số lượng bản ghi khớp với điều kiện tìm kiếm hiện tại. Nếu bạn không sử dụng tính năng lọc số này phải giống như số iT86Records 2086, nhưng trong tài khoản của bạn, nó là 25.
  3. result.Count - đây là 25. Số này không được chuyển trong phản hồi JSON vì DataTables đã biết rằng nên có 25 bản ghi trên mỗi trang.

Nếu bạn đặt tất cả.Count thay vì kết quả.Count vào iTotalDisplayRecords DataTables sẽ hiển thị phân trang.iTotalDisplayRecords và iTotalRecords được sử dụng để hiển thị thông báo "Hiển thị 1 đến 25 của iTotalDisplayRecords (iTotalRecords trong tổng số)"

Nếu iTotalDisplayRecords là bằng 25, DataTables sẽ hiển thị thông báo "Hiển thị 1 đến 25 của 25 (iTotalRecords trong tổng số)" và giả sử rằng không có trang 2; do đó, phân trang sẽ bị tắt, như trong ví dụ của bạn.

Jovan

+0

Cảm ơn bạn đã trả lời! Đó chính là vấn đề. – Khepri

+0

Tôi đã làm chính xác điều tương tự, nhờ làm rõ. – PseudoNinja

+0

tôi ba ....... – steveareeno

Các vấn đề liên quan