項目使用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

結束,告辭
