从JSON传输数据表时出错

时间:2017-05-02 09:05:06

标签: javascript json asp.net-mvc datatable

我正在开发一个项目,我使用数据表和从我的服务器返回的JSON来填充HTML表,该JSON最初是一个类的列表。

每个元素的代码如下:

表格HTML:

<table id="tablaDetalle2" class="display" role="grid" aria-describedby="example2_info">
    <thead>
        <tr>
            <th>id</th>
            <th>idFlight</th>
            <th>idSample</th>
            <th>import</th>
        </tr>
    </thead>
    <tbody>
</table>

使用Javascript:

$('#tablaDetalle2').DataTable({
    "bProcessing": true,
    "sAjaxSource": "@Url.Action("Detalle","Muestra", new {idExp = 1, descrExp="abc"})"
});

ServerCode:

public ActionResult Detalle(int idExp, string descrExp)
{
    List<Models.Muestra_Detalle> aaData = new List<Models.Muestra_Detalle>(); //Returns a list of the data
    aaData = Manager.MuestraManager.Cargar_Detalle(idExp);
    var jsonSerializer = new JavaScriptSerializer();
    var JsonFinal = jsonSerializer.Serialize(aaData);

    try
    {
        return Json(new { JsonFinal }, JsonRequestBehavior.AllowGet);

    }
    catch (Exception ex)
    { return null; }
}

返回的对象JsonFinal具有以下结构:

[{"id":"1","idFlight":1,"idSample":3217.5,"import":0}]

但是我收到以下错误:

Unhandled exception at line 188, column 47 in 
http://localhost:61298/Content/DataTables/jquery.dataTables.min.js

0x800a138f - JavaScript runtime error: Unable to get property 'length' of undefined or null reference

例如,如果我声明一个硬编码变量:

var data = new[] { "id:A", "idFlight:B", "idSample:C", "import:D" };

即使变量数据中定义的内容及其在表格中的显示方式不匹配,也不会显示错误。

我已经尝试了很多方法,有些人说它只是没有数据显示在表中,这似乎是问题解决后最好的方法。

对返回到数据表的变量进行硬编码时最大的区别是变量数据是一个有4个不同字符串的对象,而使用JsonSerializer的结果就像一个字符串,我真的不知道。

更新

将JsonFinal重命名为aaData,不同弹出窗口会出现一些错误,会尝试一些人所说的内容并报告更多细节。

服务器的新代码:

public ActionResult Detalle(int idExp, string descrExp)
    {
        ViewBag.Exp = descrExp;
        List<Models.Muestra_Detalle> azaData = new List<Models.Muestra_Detalle>();
        aaData = Manager.MuestraManager.Cargar_Detalle(idExp);
        var jsonSerializer = new JavaScriptSerializer();
        var aaData = jsonSerializer.Serialize(azaData);
        //string data2 = JsonFinal.Replace("\\", "");

            //var data = new[] { "id:A", "idgasto:B", "ImpGasto:C", "idMuestra:D" };
            return Json(new { aaData }, JsonRequestBehavior.AllowGet);


    }

新错误:DataTables警告:table id = tablaDetalle2 - 第0行第0列请求的未知参数'id'。有关此错误的详细信息,请参阅https://datatables.net/tn/4

已经去过那里,无法解决任何问题。

它就像在返回的JSON中找不到列id一样,因为它在表中变为null。

2 个答案:

答案 0 :(得分:0)

尝试直接返回json对象,而不使用序列化程序。例如

public ActionResult Detalle(int idExp, string descrExp)
{
    List<Models.Muestra_Detalle> aaData = new List<Models.Muestra_Detalle>(); //Returns a list of the data
    aaData = Manager.MuestraManager.Cargar_Detalle(idExp);

    try
    {
        return Json(aaData , JsonRequestBehavior.AllowGet);

    }
    catch (Exception ex)
    { return null; }
}

答案 1 :(得分:0)

好吧,我仍然没有根据JSON信息正确呈现表格,但我设法解决了这个问题....

我正在使用sAjaxSource的方法必须从名为aaData的服务器端返回对象JSON,现在我遇到了一个问题,无论我发送给客户端的是什么,它总是将第一列的值设为“和”列的其余部分为null,但会提出另一个问题。