无法通过服务器端处理显示 jQuery Datatable 的数据

Posted

技术标签:

【中文标题】无法通过服务器端处理显示 jQuery Datatable 的数据【英文标题】:Unable to display data for jQuery Datatable with server side processing 【发布时间】:2021-06-30 20:59:24 【问题描述】:

我在 ASP.NET Core 3.1 中遇到了 jQuery Datatable 服务器端处理的问题。服务器端以 JSON 格式返回数据,但未在 Datatable 中显示。

下面是我的控制器端代码

public IActionResult LoadData()

    var dict = Request.Form.ToDictionary(x => x.Key, x => x.Value.ToString());
    var draw = dict["draw"];
    var start = dict["start"];
    var length = dict["length"];
    
    ////Find Order Column
    var sortColumn = "Company";
    var sortColumnDir = "asc"; 
    int pageSize = length != null ? Convert.ToInt32(length) : 0;
    int skip = start != null ? Convert.ToInt32(start) : 0;
    
    DataSet ddata = GenralClass.GetCRMTestData((Convert.ToInt32(draw)-1)*100, 100);//GetCRMData();
    ddata.Tables[0].TableName = "data";
    var data = ddata;
     
    int recordsTotal = 34790;
     
    var jsonData = new  draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data ;
    return Ok(JsonConvert.SerializeObject(jsonData));

下面是我的视图侧代码

<table class="table table-striped table-bordered table-hover dataTables-example">
    <thead>
        <tr>
    
            <th style="white-space: nowrap;">Company</th>
            <th style="white-space: nowrap;">Assignedto</th>
            <th style="white-space: nowrap;">Provider</th>
    
    
    
        </tr>
    </thead>
                          
                           
</table>

下面是我的 Jquery 代码。

$(document).ready(function () 
    
    $('.dataTables-example').DataTable(
        pageLength: 100,
        processing: true,
        serverSide: true,   
        ajax: 
            url: '@Url.Action("LoadData", "SKU")',
            type: 'POST',              
            dataType: "json",                        
            columns: [
                 "data": "Company" ,
                 "data": "Assignedto" ,
                 "data": "Provider" ,
            ]                       
        
    );
);

我在服务配置中的 startup.cs 文件中做了一些更改,如下所示

public void ConfigureServices(IServiceCollection services)

    services.AddControllersWithViews()
            .AddNewtonsoftJson(options =>
            
                options.SerializerSettings.Converters.Add(new StringEnumConverter());
            );
        
    services.AddControllers();
    services.AddRazorPages();

    services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("AppDb")));

页面加载空表时不显示错误。我从 chrome 网络验证数据是从服务器端返回的,如下所示。我不知道为什么数据没有显示有什么问题。显示正确的页码,但未显示数据。任何帮助。


    "draw":"1",
    "recordsFiltered":34790,
    "recordsTotal":34790,
    "data":
        "data":[
            
                "Company":"SHAN FOODS (PVT) LTD",
                "Assignedto":"Stock-Transfer",
                "Provider":"Stock-Transfer"
            ,
            
                "Company":"SHAN FOODS (PVT) LTD",
                "Assignedto":"Vermicelli (150gm)",
                "Provider":"030180010017"
            
        ]
    

【问题讨论】:

嗨@user18912521,你的jQuery代码data = JSON.stringify(data),是错误的,你应该使用:而不是= 现在我简化了ajax调用但仍然没有成功 【参考方案1】:

您可以按如下方式更改您的代码。

加载数据:

public IActionResult LoadData()

    //...
    var jsonData = new  draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data ;
    return new JsonResult(new json = jsonData );

jquery:

$(document).ready(function () 
    $.ajax(
        type: "POST",
        url: "/SKU/LoadData",
        data: '',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: OnSuccess,
    );
);
    function OnSuccess(response)          
        $('.dataTables-example').DataTable(
            
                data: response.json.data,
                columns: [
                     "data": "company" ,
                     "data": "assignedto" ,
                     "data": "provider" ,
                ],
            );
    ;

测试结果:

【讨论】:

【参考方案2】:

像下面这样改变你的 json


    "draw":"1",
    "recordsFiltered":34790,
    "recordsTotal":34790,
    "data":[
            
                "Company":"SHAN FOODS (PVT) LTD",
                "Assignedto":"Stock-Transfer",
                "Provider":"Stock-Transfer"
            ,
            
                "Company":"SHAN FOODS (PVT) LTD",
                "Assignedto":"Vermicelli (150gm)",
                "Provider":"030180010017"
            
    ]

【讨论】:

仍然没有成功

以上是关于无法通过服务器端处理显示 jQuery Datatable 的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery DataTables 插件实现服务器端处理?

具有服务器端处理的jquery数据表生成并捕获验证和其他错误

DataTables jQuery插件服务器端处理,通过ajax删除后智能分页

jQuery中数据表插件的服务器端处理失败

使用 jquery 数据表进行服务器端处理,包括分页、过滤和搜索

如何在没有 Ajax 的 JQuery DataTables 中使用服务器端处理