2011-09-23 11 views
18

Sto lavorando a una correzione di bug in questo momento per un'applicazione sul posto di lavoro in cui lo sviluppatore precedente (andato via) non si è preoccupato di impaginare i risultati dei dati su una pagina specificatamente per l'elenco risultati dei dati.JQuery DataTables .Net Server Side Pagination Issues

Questo ovviamente ha aumentato la sua brutta testa mentre gli utenti iniziano a vedere errori di script di lunga durata in IE. Questo, combinato con la pura dimensione del volume dei dati, rende le pagine Web quasi inutili.

Avanti veloce ai miei tentativi di risolverlo e sono andati piuttosto bene. Il sito è un sito .NET MVC 2 che è stato sviluppato utilizzando DataTables per aggiungere funzionalità di ricerca/ordinamento/paging sul client. Avevo appena completato un'attività simile usando jqGrid, quindi ho pensato che sarebbe stato relativamente semplice. Ed è stato salvo un piccolo problema. Non posso per la vita di me generare link di pagina.

Un rapido VEDI:

I risultati sapere che ci sono 2086 record in questa query:

enter image description here

Ma link di paging non vengono generati.

enter image description here

Il mio metodo di azione sta tornando JSON tramite

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

dove

param.sEcho = "1", iTotalRecords = 2086, iTotalDisplayRecords = 25, e aaData è il risultato della matrice di dati da visualizzare

Per essere thor ough, è la dichiarazione di inizializzazione 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] } 
     ] 
    }); 

Mi sto perdendo qualche impostazione che impedirebbe DataTable di generare correttamente l'impaginazione tramite il recupero dei dati lato server?

risposta

30

Il tuo iTotalDisplayRecords è uguale a 25, quindi i datatables pensano che ci siano solo 25 contratti sul lato server e la seconda pagina non è necessaria perché tutti sono già mostrati nella pagina corrente. Questo è comon errore - se si dà un'occhiata alla realizzazione JQuery MVC tutorial sezione della paginazione lato server si vedrà che ci sono tre numeri:

  1. iTotalRecords = allCompanies.Count() che rappresentano tutte le voci presenti nel database (nel tuo caso 2086)
  2. iTotalDisplayRecords = filteredCompanies.Count() che rappresenta il numero dei record che corrispondono alla condizione di ricerca corrente. Se non hai usato il filtro questo numero dovrebbe essere uguale a iTotalRecords 2086, ma in yourcase è 25.
  3. result.Count - questo è 25. Questo numero non viene passato nella risposta JSON perché DataTables già sa che lì dovrebbe essere 25 record per pagina.

Se si inserisce tutto.Count invece del risultato.Count in iTotalDisplayRecords DataTables mostrerà il paging.iTotalDisplayRecords e iTotalRecords vengono utilizzati per mostrare un messaggio "Mostra 1 a 25 di iTotalDisplayRecords (iTotalRecords in totale)"

Se iTotalDisplayRecords è pari a 25, DataTable mostrerà il messaggio "Risultati da 1 a 25 di 25 (iTotalRecords in totale)" e supponiamo che non ci sia nessuna pagina 2; quindi, il paging sarà disabilitato, come nel tuo esempio.

Jovan

+0

Grazie per la risposta! Questo era esattamente il problema. – Khepri

+0

Stavo facendo la stessa identica cosa, grazie per il chiarimento. – PseudoNinja

+0

me tre ....... – steveareeno

Problemi correlati