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

ASP.NET Core MVC中jQuery DataTable列排序功能失效求助

解决jQuery DataTable列排序失效问题

核心原因

你开启了serverSide: true模式,这种模式下DataTable的排序逻辑依赖后端处理——前端仅负责传递排序参数(排序字段、排序方向),但你的后端LoadStud方法完全没有利用传入的FilterByColumn和ASC_DSEC参数做排序处理,直接返回原始数据列表,导致点击排序按钮无效果。

此外代码中存在一处类型不匹配错误:实体类STUD_MANAGEMENT的AGE是int类型,但后端初始化数据时给的是字符串值,会引发编译/运行错误,也需要一并修复。

修复步骤

1. 修复后端数据初始化的类型错误

修改LoadStud方法中实体的AGE赋值,将字符串改为整数:

STUD_MANAGEMENT dm = new STUD_MANAGEMENT();
dm.STUD_ID = 1;
dm.CLASS_ID = 1;
dm.NAME = "James";
dm.TEACHER = "SEPHORA";
dm.AGE = 12; // 改为int类型

STUD_MANAGEMENT dm1 = new STUD_MANAGEMENT();
dm1.STUD_ID = 2;
dm1.CLASS_ID = 2;
dm1.NAME = "Naneem";
dm1.TEACHER = "Chithra";
dm1.AGE = 15;

STUD_MANAGEMENT dm11 = new STUD_MANAGEMENT();
dm11.STUD_ID = 3;
dm11.CLASS_ID = 3;
dm11.NAME = "Sony";
dm11.TEACHER = "Mano USA";
dm11.AGE = 3;

2. 在后端添加排序逻辑

在LoadStud方法中,统计总记录数之前,添加根据前端传入参数排序的代码:

// 处理排序逻辑
if (!string.IsNullOrEmpty(FilterByColumn) && !string.IsNullOrEmpty(ASC_DSEC))
{
    ListData = FilterByColumn switch
    {
        "NAME" => ASC_DSEC == "asc" ? ListData.OrderBy(x => x.NAME).ToList() : ListData.OrderByDescending(x => x.NAME).ToList(),
        "AGE" => ASC_DSEC == "asc" ? ListData.OrderBy(x => x.AGE).ToList() : ListData.OrderByDescending(x => x.AGE).ToList(),
        "TEACHER" => ASC_DSEC == "asc" ? ListData.OrderBy(x => x.TEACHER).ToList() : ListData.OrderByDescending(x => x.TEACHER).ToList(),
        // 如果需要支持隐藏列排序,可添加STUD_ID、CLASS_ID的分支
        _ => ListData
    };
}

recordsTotal = ListData.Count();

3. 修正前端无效的columnDefs配置

当前前端columnDefs中的targets: [5, 6, 7, 8, 11]超出了现有列的索引范围(当前仅5列,索引0-4),属于无效配置,可删除或调整为实际需要的列索引:

columnDefs: [{ className: "dt-center", targets: [3,4], width: '2%' }],
// 比如将样式应用到Age和Teacher列(索引3、4)

验证

修改完成后,点击表格列头部的排序按钮,前端会将排序参数传递给后端,后端根据参数对数据排序后返回,表格即可正常展示排序结果。

内容的提问来源于stack exchange,提问作者KitKat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:23:23