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
相关产品推荐
相关产品推荐

