【问题标题】:requested unknown parameter '0' for row 0 column 0 after ajax call在ajax调用后为第0行第0列请求未知参数'0'
【发布时间】:2019-10-11 08:50:39
【问题描述】:

我想在从服务器获取数据时使用服务器端渲染。当我单击数据表上的分页按钮时,我想从服务器上传新数据。所以我为此使用了以下代码。但我得到这个错误 “DataTables 警告:表 id=MyDataTable - 为第 0 行第 0 列请求未知参数 'CompanyName'。有关此错误的详细信息,请参阅http://datatables.net/tn/4”。

 public class HomeController : Controller
    {

        public async Task<ActionResult> Index()
        {

            return View();
        }   

        public async Task<JsonResult> GetEmployeeRecord(DataTablesParam param)
        {
            var a = await new CompanyService().Getlisttt(x => x.Phone1 == "12345688");
            List<CompanyViewObject> List = new List<CompanyViewObject>();
            int pageNo = 1;

            if (param.iDisplayStart >= param.iDisplayLength)
            {

                pageNo = (param.iDisplayStart / param.iDisplayLength) + 1;

            }

            int totalCount = 0;


            totalCount = a.Count();

            List = a.Skip((pageNo - 1) * param.iDisplayLength).Take(param.iDisplayLength).Select(x => new CompanyViewObject
            {
                CompanyName = x.CompanyName,
                Description = x.Description,
                GlobalCompanyID = x.GlobalCompanyID,
                Phone1 = x.Phone1,
                CompanyTypeName = x.CompanyTypeName,
                CompanyOwnershipName = x.CompanyOwnershipName,
                CompanyIndustryName = x.CompanyIndustryName,
                ParentID = x.ParentID,
                Website = x.Website,
                EMail = x.EMail,
                Phone2 = x.Phone2,
                Fax = x.Fax,
                Confirmed = x.Confirmed,
                Active = x.Active

            }).ToList();



            return Json(new
            {
                aaData = List,
                sEcho = param.sEcho,
                iTotalDisplayRecords = totalCount,
                iTotalRecords = totalCount
            });
        }
}

我的查看页面是这个

<div class="row pt-10">

    <div class="col-md-12">
        <table class="display" id="MyDataTable">
            <thead>
                <tr>
                    <th>
                        CompanyName
                    </th>
                    <th>
                        Description
                    </th>
                    <th>
                        GlobalCompanyID
                    </th>
                    <th>
                        Phone1
                    </th>
                </tr>
            </thead>

            <tbody></tbody>

        </table>
    </div>
</div>


<script>

    $(document).ready(function () {


           // $("#MyDataTable").DataTable();

           BindDataTable();
        })

    var BindDataTable = function (response) {
        var x;


        $("#MyDataTable").DataTable({
            "bServerSide": true,
            "sAjaxSource": "/Home/GetEmployeeRecord",
            "fnServerData": function (sSource, aoData, fnCallback) {               


                $.ajax({

                    type: "Get",
                    data: aoData,
                    url: sSource,
                    success: fnCallback,

                })


                console.log(fnCallback);
            },


            "columns": [

                { "data": "CompanyName" },
                { "data": "Description" },                
                { "data": "Phone1" },
                { "data": "GlobalCompanyID" },

            ]

        });

        console.log(x);


        }


</script>

提前致谢

编辑=当我像这样更改代码时,我没有收到错误,但我仍然无法获取表上的值

"columns": [

        { "data": 'aaData["CompanyName"]' },
        { "data": 'aaData["Description"]' },
        { "data": 'aaData["Phone1"]'},
        { "data": 'aaData["GlobalCompanyID"]' },


    ],    

我的ajax返回对象是这样的

{"sEcho":1,"iTotalDisplayRecords":137,"iTotalRecords":137,"aaData":[{"globalCompanyID":13,"companyTypeName":"Other","companyOwnershipName":"Other","companyIndustryName":"Engineering","parentID":0,"companyName":"ffff","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":false},{"globalCompanyID":14,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 1","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true},{"globalCompanyID":15,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 2","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true},{"globalCompanyID":16,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 3","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true},{"globalCompanyID":17,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 4","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true},{"globalCompanyID":18,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 5","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true},{"globalCompanyID":19,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 6","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true},{"globalCompanyID":20,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 7","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true},{"globalCompanyID":21,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 8","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true},{"globalCompanyID":22,"companyTypeName":"Prospect","companyOwnershipName":"Public","companyIndustryName":"Agriculture","parentID":0,"companyName":"Company 9","website":"www.youtube.com","eMail":"support@micromarin.com","phone1":"12345688","phone2":"333333333333","fax":"7788554422","description":"Yeni kurulan bir firma","confirmed":true,"active":true}]}

我将以下代码添加到 public void ConfigureServices(IServiceCollection services) 中的 startup.cs 并解决了我猜控制器之前没有返回 json 格式的问题。更新控制器后返回 Json

Services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver())

【问题讨论】:

    标签: ajax datatables


    【解决方案1】:

    这是服务端Datatable的基本结构,

    function datatable(sSource, aoData, fnCallback){
        var table = $('#tableID').DataTable({
            dom: dom,
            buttons : [
                'excel', 'pdf', 'print',
            ],
            lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "All"]],
            serverSide: true,
            processing: true,
            ajax: {
                "url": sSource,
                "type": "GET",
                "data": aoData,
                success: fnCallback
            },
        });
    }
    

    Ajax 请求是 GET 类型,data_function 是不是你需要传递任何参数,否则离开。

    希望这会有所帮助!

    【讨论】:

    • 如何在我的代码中将此函数(sSource、aoData、fnCallback)参数发送到控制器
    【解决方案2】:

    我在startup.cs中添加了下面的代码,问题就解决了;

    Services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver())
    

    【讨论】:

      猜你喜欢
      • 2019-01-28
      • 1970-01-01
      • 2016-09-24
      • 2015-12-15
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      相关资源
      最近更新 更多