DataTables jquery.dataTables.min.js:181 Uncaught TypeError:无法读取属性' length'未定义的

时间:2016-09-19 13:53:08

标签: ajax asp.net-mvc datatables

我无法指定问题的原因/位置,这是我的代码:

HTML:

   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);

服务器端:

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

这是我的Ajax Call:

@RequestMapping(method = RequestMethod.POST)

我收到此错误:&#34; jquery.dataTables.min.js:181 Uncaught TypeError:无法读取属性&#39; length&#39;未定义&#34;

注意:我使用的是jquery-1.12.3.js&amp; DataTables 1.10.12。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

最后我发现了问题:

首先:datatables需要特定的格式,所以我改变了我的服务器端代码:

File::Temp->new()

第二:我已将这些行添加到我的脚本

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);

现在它完美无缺。

答案 1 :(得分:0)

Datatables期望返回的json采用特定格式,根据documentation - 请参阅“返回数据”部分。

你的json应该是这样的:

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

错误可能是数据表查找不存在的字段的结果。请注意,draw值是在原始GetCompanyGrid()请求中发送的,您无需自行生成。