项目使用AdminLTE(基于Bootstrap 二次开发的框架)作为开发框架.
使用DataTables 的时候部分页面需要传参 给后台做筛选过滤.
但是不知道怎么将DataTables的参数 和自定义的参数一起传过去.
刚开始想自己组建参数 将查询结果重新封装. 测试代码如下?()
$('#xxx').DataTable({ "language": Language, "paging": true, "lengthChange": true, "searching": true, "ordering": false, "info": true, "autoWidth": false, "lengthChange": false, "serverSide": true,//交由服务端处理 开启 "ajax": function (data, callback, settings) { //封装请求参数 var option = { BeginTime: $('#BeginTime').val(), EndTime: $('#EndTime').val(), UserId: $('#UserId').val(), PageDirection: 0, CurrentPageIndex: 0, Count: 2, }; var vData = jsonPost("/uri", option); //需要做异常处理 var returnData = {}; returnData.draw = vData.PageDirection; returnData.recordsTotal = vData.PageCount; returnData.recordsFiltered = vData.Datas.length; returnData.data = vData.Datas; callback(returnData); }, });
后来觉得.这样我还要再获取当页码什么的 很麻烦.
就再次查阅了JQuery DataTables 的文档
https://datatables.net/manual/server-side 这里有说明 当启用服务端处理时.DataTables 会自动向服务端发送一些参数. 以便服务端做处理.
知道了启用服务端处理后 DataTables 将会自动发送请求后.再找DataTables Ajax 添加/修改 参数. 连接如下 ?
https://datatables.net/reference/option/ajax.data
下面?是几种添加参数的例子 我们可以按照需求进行选择.
因为我后台用的是对象参数 所以我选择的是第三种 Return an object.
回到后台 ,在自己的RequestDto 中添加我们需要处理的参数(DataTables 本身自带的参数 例: 页码, 请求数据量,偏移量 ....)就行了.
修改后的代码 ?
$('#xxxx').DataTable({ "language": Language, "paging": true, "lengthChange": true, "searching": true, "ordering": false, "info": true, "autoWidth": false, "lengthChange": false, "serverSide": true,//交由服务端处理 开启 "ajax": { "url": "/Financial/SelectTransferRecord", "type": "POST", "data": function (d) { return $.extend({}, d, { BeginTime: $('#BeginTime').val(), EndTime: $('#EndTime').val(), UserId: $('#UserId').val(), }); } }, });
后端接收参数Class ?
public class ReqDto { public DateTime BeginTime { get; set; } public DateTime EndTime { get; set; } public string UserId { get; set; } public int draw { get; set; } public int length { get; set; } public int start { get; set; } }
查询方法
public JsonResult Serch(ReqDto req) { var result = GetList(req); //需添加DataTables 必须的参数 var jsonResult = new { draw = result.Draw, recordsTotal = result.Total, recordsFiltered = result.Count, data = result.Datas }; return Json(jsonResult); }
必要参数列表
文档地址 https://datatables.net/manual/server-side
结束,告辞