本文详解如何在使用 datatables 的 `serverside: true` 模式时,正确将页面上用户输入的动态值(如搜索框内容)通过 ajax 提交至 mvc 控制器,避免因闭包、执行时机或数据绑定错误导致参数始终为 `null`。
在使用 DataTables 实现服务器端分页(serverSide: true)时,一个常见误区是试图在 ajax.data 中直接引用全局变量(如 window.searchValue)或静态 DOM 查询结果(如 $(“#searchValue”).val())。问题在于:DataTables 在初始化时即对 data 对象进行一次求值并缓存,后续 AJAX 请求均复用该快照值,而非每次请求前动态获取最新输入。因此,即使你点击按钮更新了 window.searchValue,DataTable 并不会自动感知变化,导致控制器接收到的仍是初始 undefined 或空字符串。
正确的解决方案是使用 ajax.data 的函数形式(即 data: function(d) { … }),它会在每次 AJAX 请求发起前被调用,确保获取到实时的 DOM 值。以下是优化后的完整配置示例: