2016-09-19 3 views
1

ich angeben kann nicht lesen, was/wo das Problem ist, hier ist mein Code:Tables jquery.dataTables.min.js: 181 Uncaught Typeerror: kann Eigenschaft 'Länge' undefinierter

HTML:

    <table id="companies" class="table table-striped table-bordered table-hover"> 
        <thead> 
         <tr> 
          <th class="center"> 
           Id 
          </th> 
          <th>RegNo</th> 
          <th>Name</th> 
          <th class="hidden-480">Industry</th> 

          <th class="hidden-phone"> 
           Size 
          </th> 
          <th class="hidden-480">LineOfDefence</th> 

          <th>Address</th> 
         </tr> 
        </thead> 
       </table> 

Server-Seite:

var result = new 
    { 
     rows = (from company in db.Company.ToList() 
       select new 
       { 
        id = company.CompanyId, 
        RegNo = company.RegestrationNumber, 
        Name = company.Name, 
        Industry = company.IndustryType.Name, 
        Size = company.CompanySize.Name, 
        LineOfDefence = company.LineOfDefence.Name, 
        Address = company.Address 
       }).ToArray() 
    }; 
    return Json(result, JsonRequestBehavior.AllowGet); 

und hier ist meine Ajax Call:

<script> 
    $(document).ready(function() 
    { 
     $('#companies').DataTable({ 
      "ajax": { 
       url: "/Company/GetCompanyGrid", 
       type: "GET", 
       dataType: "json" 
      } 
     }); 
    }); 
</script> 

Ich erhalte diese Fehlermeldung: "jquery.dataTables.min.js: 181 Uncaught Typeerror: kann Eigenschaft 'Länge' undefinierter lesen"

Anmerkung: Ich bin mit jquery-1.12.3.js & Datentabellen 1.10.12.

Jede Hilfe wäre willkommen.

+0

Ihr Anruf erreichen Controller zum Abrufen von Datensätzen? und zeigen auch datatable Bind-Eigenschaften wie Paging, Sortierung, Spalten usw. –

Antwort

0

Datatables erwartet, dass der zurückgegebene JSON in einem bestimmten Format vorliegt, wie in der documentation - siehe Abschnitt "Zurückgegebene Daten".

Ihre json sollte wie folgt aussehen:

return Json(new 
{ 
     param.draw, 
     recordsTotal = result.Count, 
     recordsFiltered = result.Count, 
     data = result 
}, JsonRequestBehavior.AllowGet); 

Der Fehler ist wahrscheinlich eine Folge von Datentabellen für ein Feld suchen, das nicht vorhanden ist. Beachten Sie, dass der draw Wert in der ursprünglichen GetCompanyGrid() Anforderung gesendet wird, Sie müssen es nicht selbst generieren.

zuerst:

+0

OP hat keine Paging verwenden, so kann dieses Problem nicht sein, ich habe Op gebeten, datatable Bind-Eigenschaften anzuzeigen, so haben wir bessere Idee –

+0

@SandipPatel - es doesn ' Die MATERIALIEN ERWARTEN dennoch, diese Parameter zu erhalten. – markpsmith

+0

Datentabelle benötigen diese Info nicht wie oben Code –

1

schließlich das Problem, das ich habe herausgefunden Datentabellen erwarten bestimmtes Format, so änderte ich meinen Server-Side-Code wie folgt aus:

var result = new 
      { 
       **draw = 1, 
       recordsTotal = db.Company.ToList().Count, 
       recordsFiltered = db.Company.ToList().Count,** 
       data = (from company in db.Company.ToList() 
         select new 
         { 
          Id = company.CompanyId, 
          RegNo = company.RegestrationNumber, 
          Name = company.Name, 
          Industry = company.IndustryType.Name, 
          Size = company.CompanySize.Name, 
          LineOfDefence = company.LineOfDefence.Name, 
          Address = company.Address, 

         }).ToArray() 
      }; 
      return Json(result 
      , JsonRequestBehavior.AllowGet); 

Sekunde: Ich habe diese Zeilen hinzugefügt mein Skript

<script> 
    $(document).ready(function() 
    { 
     $('#companies').DataTable({ 
      "ajax": { 
       url: "/Company/GetCompanyGrid", 
       type: "GET", 
       dataType: "json" 
      },"columns": [ 
      { "data": "Id" }, 
      { "data": "RegNo" }, 
      { "data": "Name" }, 
      { "data": "Industry" }, 
      { "data": "Size" }, 
      { "data": "LineOfDefence" }, 
      { "data": "Address" }, 
      { "data": "Logo" }, 
      { "data": null }, 
      ] 
     }); 
    }); 
</script> 

und jetzt perfekt es funktioniert.

+0

Keine Notwendigkeit, 'draw',' recordsTotal' und 'recordsFiltered' Eigenschaften hinzuzufügen, diese werden nur für den serverseitigen Verarbeitungsmodus ** benötigt **, den Sie nicht verwenden, die' data' Eigenschaft ist die einzige, die für die benötigt wird Modus, den Sie verwenden, siehe [Ajax] (https://datatables.net/manual/ajax). Sie können auch Ihre eigene Antwort akzeptieren, um sie zu schließen. –

Verwandte Themen