C# MVC中DataTables服务端分页参数传递方法
在C# MVC中使用DataTables实现服务端分页的参数传递问题
- 我在C# MVC项目里用datatables.net做服务端加载,现在要实现服务端分页,但不知道怎么通过Javascript/Ajax给控制器传skiprecords、totalrecords这类分页参数。
- 目前不传参数表格能正常加载,但需要让控制器知道当前是第4页,只返回该页的数据。
- 官网的服务端分页示例能正常运行,但没看到传参数,搞不懂原理。
我的JS代码如下:
dataTable = $("#tblDetails").DataTable( { "sAjaxSource": "/MyController/MyMethod", "bServerSide": true, "bProcessing": true, "bSearchable": true, "order": [[1, 'asc']], "columns": [ { "data": "Col1", "autoWidth": true, "searchable": true }, { "data": "Col2", "autoWidth": true, "searchable": true }, ] } );
核心解答
DataTables自动传递的分页参数
当开启bServerSide: true时,DataTables会自动向服务端传递一套标准参数,无需手动拼接:
start:当前页需要跳过的记录数(对应你提到的skiprecords),比如第4页、每页10条的话,start值为30length:每页显示的记录数draw:请求的唯一标识号,服务端需要原样返回该值,用于DataTables校验渲染逻辑
此外还有排序、搜索相关的配套参数(如order[0][column]指定排序列、search[value]指定搜索关键词),可按需在控制器中接收。
C# MVC控制器接收参数示例
直接在控制器方法中声明对应参数即可接收:
public ActionResult MyMethod(int draw, int start, int length, string searchValue) { // 分页逻辑:跳过start条,取length条数据 var currentPageData = 你的数据查询方法(start, length, searchValue); var totalRecords = 总记录数查询方法(); var filteredRecords = 过滤后记录数查询方法(searchValue); // 返回DataTables要求的标准格式JSON var response = new { draw = draw, recordsTotal = totalRecords, recordsFiltered = filteredRecords, data = currentPageData }; return Json(response, JsonRequestBehavior.AllowGet); }
官网示例的原理
官网示例无需手动传参,是因为开启bServerSide: true后,DataTables会自动封装并发送上述标准参数,后端服务完全遵循这套参数规范处理分页、排序、搜索逻辑,因此无需额外手动传递参数。
内容的提问来源于stack exchange,提问作者Frank Martin
相关产品推荐
相关产品推荐

