加载ASP.NETMVCJSONResult jQuery数据表

加载ASP.NETMVCJSONResult jQuery数据表,jquery,json,asp.net-mvc-3,datatables,Jquery,Json,Asp.net Mvc 3,Datatables,我正在尝试获取数据表(http://datatables.net)使用ASP.NETMVC控制器返回的JsonResult。我一直收到一个“DataTables警告(table id='example'):从数据源请求的第0行未知参数“0”错误,根据文档,这意味着它找不到列 控制器中返回JsonResult的代码如下所示: public JsonResult LoadPhoneNumbers() { List<PhoneNumber> phoneNum

我正在尝试获取数据表(http://datatables.net)使用ASP.NETMVC控制器返回的JsonResult。我一直收到一个“DataTables警告(table id='example'):从数据源请求的第0行未知参数“0”错误,根据文档,这意味着它找不到列

控制器中返回JsonResult的代码如下所示:

    public JsonResult LoadPhoneNumbers()
    {
        List<PhoneNumber> phoneNumbers = new List<PhoneNumber>();
        PhoneNumber num1 = new PhoneNumber { Number = "555 123 4567", Description = "George" };
        PhoneNumber num2 = new PhoneNumber { Number = "555 765 4321", Description = "Kevin" };
        PhoneNumber num3 = new PhoneNumber { Number = "555 555 4781", Description = "Sam" };

        phoneNumbers.Add(num1);
        phoneNumbers.Add(num2);
        phoneNumbers.Add(num3);

        return Json(phoneNumbers, JsonRequestBehavior.AllowGet);
    }
<script>
$(document).ready(function () {
    $('#example').dataTable({
        "bProcessing": true,
        "sAjaxSource": '/Account/LoadPhoneNumbers/',
        "sAjaxDataProp": ""
    });
});
</script>
<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
<thead>
    <tr>
        <th>
            Number
        </th>
        <th>
            Description
        </th>
    </tr>
</thead>
<tbody>
</tbody>
<tfoot>
</tfoot>
</table>
我仍然得到错误。有什么建议吗

谢谢

在这种情况下,似乎控制器方法返回的数据需要采用特定格式。他实际上是把名单作为aaData的一部分返回的。它还解释了每个参数的用途。也许您只是没有将返回格式化为DataTables能够理解的json格式

public class HomeController : Controller
{
    public ActionResult AjaxHandler(jQueryDataTableParamModel param)
    {
        return Json(new{
                sEcho = param.sEcho,
                iTotalRecords = 97,
                iTotalDisplayRecords = 3,
                aaData = new List<string[]>() {
                    new string[] {"1", "a1", "a2", "a3"},
                    new string[] {"2", "b1", "b2", "b3"},
                    new string[] {"3", "c1", "c2", "c3"}
                    }
            },
        JsonRequestBehavior.AllowGet);
    }
}
公共类HomeController:控制器
{
公共操作结果AjaxHandler(jQueryDataTableParamModel参数)
{
返回Json(新的{
sEcho=param.sEcho,
iTotalRecords=97,
iTotalDisplayRecords=3,
aaData=新列表(){
新字符串[]{“1”、“a1”、“a2”、“a3”},
新字符串[]{“2”、“b1”、“b2”、“b3”},
新字符串[]{“3”、“c1”、“c2”、“c3”}
}
},
JsonRequestBehavior.AllowGet);
}
}

以下内容对我来说非常有用:

$(function () {
    $('#example').dataTable({
        bProcessing: true,
        sAjaxSource: '@Url.Action("LoadPhoneNumbers", "Home")'
    });
});
我已删除
sAjaxDataProp
属性

使用此数据源:

public ActionResult LoadPhoneNumbers()
{
    return Json(new
    {
        aaData = new[] 
        {
            new [] { "Trident", "Internet Explorer 4.0", "Win 95+", "4", "X" },
            new [] { "Gecko", "Firefox 1.5", "Win 98+ / OSX.2+", "1.8", "A" },
            new [] { "Webkit", "iPod Touch / iPhone", "iPod", "420.1", "A" }
        }
    }, JsonRequestBehavior.AllowGet);
}
以手机为例:

public ActionResult LoadPhoneNumbers()
{
    var phoneNumbers = new List<PhoneNumber>(new[] 
    {
        new PhoneNumber { Number = "555 123 4567", Description = "George" },
        new PhoneNumber { Number = "555 765 4321", Description = "Kevin" },
        new PhoneNumber { Number = "555 555 4781", Description = "Sam" }
    });

    return Json(new
    {
        aaData = phoneNumbers.Select(x => new[] { x.Number, x.Description })
    }, JsonRequestBehavior.AllowGet);
}
public ActionResult LoadPhoneNumbers()
{
var phoneNumbers=新列表(新[]
{
新电话号码{Number=“555 123 4567”,Description=“George”},
新电话号码{Number=“555 765 4321”,Description=“Kevin”},
新电话号码{Number=“555 555 4781”,Description=“Sam”}
});
返回Json(新的
{
aaData=phoneNumbers.Select(x=>new[]{x.Number,x.Description})
},JsonRequestBehavior.AllowGet);
}

另外,您的HTML标记是否已关闭,或者只是复制/粘贴错误。好的,问题在于PhoneNumbers类的序列化方式。。如果您查看fiddler中的JSON,它看起来是这样的:[{“Number”:“555 123 4567”,“Description”:“George”},{“Number”:“555 765 4321”,“Description”:“Kevin”},{“Number”:“555 555 4781”,“Description”:“Sam”}]如何删除属性名称编号和描述?@PW763,是的,问题在于您格式化JSON的方式。请看我的更新答案,并举例说明如何正确设置电话号码的格式。嗨,Dari,我也遇到过类似的问题。我相信你会了解ans,我提出了一个新问题,这里是链接脚本失败,缺少'aDataSort'参数。你需要在DataTable脚本代码中添加“columns”:[你的col values]参数。
public ActionResult LoadPhoneNumbers()
{
    var phoneNumbers = new List<PhoneNumber>(new[] 
    {
        new PhoneNumber { Number = "555 123 4567", Description = "George" },
        new PhoneNumber { Number = "555 765 4321", Description = "Kevin" },
        new PhoneNumber { Number = "555 555 4781", Description = "Sam" }
    });

    return Json(new
    {
        aaData = phoneNumbers.Select(x => new[] { x.Number, x.Description })
    }, JsonRequestBehavior.AllowGet);
}