You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JQuery DataTables服务端分页draw值错误致跨页跳转异常求助

DataTables服务端分页跳页错误修复方案

问题核心

你的分页错误源于后端误用了draw参数计算分页偏移量。draw是DataTables用来标识请求顺序的自增计数器,和页码没有直接关联。当直接跳页时,draw的数值不等于目标页码,导致计算出的偏移量错误,从而显示错误的页面数据。

修改思路及代码调整

1. 恢复并使用start参数

DataTables在服务端分页请求中,会通过start参数传递当前页需要跳过的记录总数(比如第3页、每页5条时,start的值是10),这才是计算分页偏移的正确参数。

修改后端代码如下:

int siteID = (Session["SiteID"] != null)? (int)Session["SiteID"] : 0;
if (siteID == 0)
{
    siteID = (int)this.DetermineSiteID();
    Session["SiteID"] = siteID;
}

var draw = Request.Form["draw"].FirstOrDefault().ToString();
// 恢复start参数的读取
var start = Request.Form["start"].FirstOrDefault().ToString();
var length = Request.Form["length"].FirstOrDefault().ToString();
var sortColumn = Request.Form["columns[" + Request.Form["order[0][column]"].FirstOrDefault() + "][name]"].FirstOrDefault().ToString();
var sortColumnDirection = Request.Form["order[0][dir]"].FirstOrDefault().ToString();
var searchValue = Request.Form["search[value]"].FirstOrDefault().ToString();
int pageSize = length != null? Convert.ToInt32(length) : 0;
// 直接用start作为skip值,无需通过draw计算
int skip = start != null? Convert.ToInt32(start) : 0;
int recordsTotal = 0;

var userData = rule.GetVisitorSummerybyDates(DateTime.Parse(toDate), DateTime.Parse(fromDate), siteID.ToString());

if (!string.IsNullOrEmpty(searchValue) && searchValue != "\0")
{
    userData = (List<VisitorInOutDetails>)userData.Where(
                                   m => m.IDNumber.Contains(searchValue)
                                || m.ContactNumber.Contains(searchValue)
                                || m.Company.Contains(searchValue));
}

recordsTotal = userData.Count();
// 直接使用skip变量,删除原有用draw计算的错误逻辑
var data = userData.Skip(skip).Take(pageSize).ToList();

var jsonData = new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data };

return Json(jsonData);

2. 前端代码无需修改

你的前端DataTables配置是正确的,serverSide: true已经会自动传递start、length等分页参数,不需要额外调整。

验证逻辑

修改后,当你点击第3页时,前端会传递start=10(每页5条),后端直接跳过10条记录,取接下来的5条,正好是第3页的数据,跳页功能就能正常工作了。

内容的提问来源于stack exchange,提问作者pl-jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:35:08