DataTables与ASP.NET Core MVC集成问题:表单无法读取全部值
问题原因
你遇到的问题是因为前端DataTables的列配置中没有指定name属性。当你对第5列(对应索引4,列从0开始计数)排序时,DataTables不会向后端传递该列的name参数,所以后端通过columns[4][name]读取到的值为空。
解决方案
有两种可行的解决方式:
方式一:前端为列添加name属性
修改前端DataTables的columns配置,给需要排序的列加上name属性(通常和data属性值一致即可):
$(document).ready(function() { var logs = $('#logs').dataTable({ "processing": true, "serverSide": true, "filter": true, "ajax": { "url": "/api/logs", "type": "POST", "dataType": "json" }, "columns": [ { className: 'dt-control', orderable: false, data: null, defaultContent: ''}, { "data": "timeStamp", "name": "timeStamp" }, { "data": "level", "name": "level" }, { "data": "queueId", "name": "queueId" }, { "data": "message", "name": "message" } ] }) })
修改后,后端就能通过columns[N][name]正确获取到排序字段名。
方式二:后端直接读取columns[N][data]的值
既然前端已经给列指定了data属性,后端可以直接读取这个值来获取排序字段,不需要依赖name属性:
var orderColumn = Request.Form["order[0][column]"].FirstOrDefault(); // 改用columns[N][data]获取字段名 var sortColumnData = "columns[" + orderColumn + "][data]"; var sortColumn = Request.Form[sortColumnData].FirstOrDefault(); var sortColumnDirection = Request.Form["order[0][dir]"].FirstOrDefault(); var searchValue = Request.Form["search[value]"].FirstOrDefault();
这种方式不需要修改前端代码,直接调整后端逻辑即可。
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

