5

Sto usando asp.net mvc5 e sto provando a utilizzare l'elaborazione lato server del plugin datable jquery. Le esercitazioni di elaborazione lato server mostrano un formato per la restituzione del risultato dal server.Ma la differenza nel mio progetto è che non posso inviare un array tipizzato per "dati" dal server. Invio tutto il testo come stringa con tutti i tag html. Il mio codice datatable come sotto.Perché non è consentito l'utilizzo in ajax dell'elaborazione lato server JQuery datatable?

var e = t.DataTable({processing: true, 
     serverSide: true, 
     info: true, 
     stateSave: true, 
     PaginationType: "full_numbers", 
     ajax:{ 
      "url": '@Url.Action("AjaxGetJsonData","Define",new { tablename= @HttpContext.Current.Request.QueryString["tablename"] })', 
      "type": "GET", 
      "success": function (result) { 
       console.log(result); 

       $("#sample_1").find("tbody").html(result.data); 
       $("#sample_1_processing").hide(); 
       Init(); 
       //var oSettings = $("#sample_1").dataTable().fnSettings(); 
       //oSettings.iTotalRecords = result.recordsTotal; 

      } 

     } 

il risultato di Ajax è qualcosa di simile come sotto,

Object {draw: 1, iTotalRecords: 25000, iTotalDisplayRecords: 0, data: Array[1]} 

i dati è come

<tr><td></td><td></td><td></td><td></td></tr> 

perché la vista è generico per molti tavoli e ci sono molte situazioni che ho dovrebbe controllare.Così, sto usando StringBuilder sul lato server. Se metto il successo su ajax, gli elementi di impaginazione scompaiono nella parte inferiore di datatable. Perché non è consentito utilizzare il successo in ajax? ho tutte le caratteristiche totali di datatable e c'è un modo per impostare manualmente le funzioni come iTotalRecords? So che qui non è un forum datatable. Mi dispiace per questo, ma ho passato molto tempo e non riesco a trovare una soluzione. Voglio gestire manualmente tutte le funzionalità di datatable in ajax. Sto usando l'ultima versione di datatable.

+0

Perché non usi PartialView per Datatable? –

+0

@Alorika grazie per il vostro consiglio. sto già usando la vista parziale per la tabella. – emres

risposta

2

Ho risolto il mio problema alla fine. C'è qualcosa di interessante ma posso usare il successo ora.

var e = t.DataTable({ 
     processing: true, 
     serverSide: true, 
     info: true, 
     stateSave: true, 
     PaginationType: "full_numbers", 
     "sAjaxSource": '@Url.Action("AjaxGetJsonData","Define")', 
     "fnServerData": function (sSource, aoData, fnCallback) { 
      aoData.push({ "name": "tablename", "value": $("#temprory").val() }); 
      console.log(aoData); 
      $.ajax({ 
       url: sSource, 
       type: "POST", 
       data: aoData, 
       success: function (msg) { 
        fnCallback(msg); 
        console.log(msg); 
        $("#sample_1").find("tbody").html(msg.data); 
        $("#sample_1_processing").hide(); 
        Init(); 
       } 
      }); 
     } 

Il punto interessante è che se si rimuove fnCallback (msg), la parte di sotto della DataTable che comprende l'impaginazione scompare. Non so esattamente cosa faccia ma questo ha risolto il mio problema.

+0

A proposito, Init() non è correlato al problema. Non si tratta di dati. – emres