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

ASP.Net Core MVC中jQuery Datatable无法获取选中行求助

问题分析与解决

核心问题

  1. 手动切换selected类不被Datatable识别:你用$(this).toggleClass('selected')手动给行加选中样式,但Datatable的rows({ selected: true })是基于自身内部维护的选中状态,而非DOM元素的class,因此无法识别你手动标记的行。
  2. 可能未正确获取Datatable实例:如果LoadTableExclude()函数没有返回初始化后的Datatable对象,excludeTable会是undefined,调用rows()方法时控制台会抛出类似Cannot read property 'rows' of undefined的错误,导致后续代码逻辑直接走到提示未选中行的分支。

解决步骤

步骤1:确保LoadTableExclude和LoadTableInclude返回Datatable实例

初始化Datatable时必须返回实例对象,示例如下:

function LoadTableExclude() {
    // 返回Datatable实例
    return $('#excludeTable').DataTable({
        ajax: {
            url: '/YourController/GetExcludeData',
            type: 'GET'
        },
        columns: [
            { data: 'siteCode' },
            // 其他列配置...
        ]
        // 其他Datatable配置项
    });
}

// LoadTableInclude函数同理
function LoadTableInclude() {
    return $('#includeTable').DataTable({
        // 对应的数据接口与列配置
    });
}

步骤2:用Datatable API处理行选中,替代手动加class

修改行点击事件,使用Datatable内置的选中API维护选中状态,同时可同步保留视觉样式:

$(document).ready(function () {
    var excludeTable = LoadTableExclude();
    // 用Datatable API处理选中逻辑
    excludeTable.on('click', 'tbody tr', function () {
        var row = excludeTable.row(this);
        // 切换选中状态
        row.selected() ? row.deselect() : row.select();
        // 同步切换class保持视觉效果
        $(this).toggleClass('selected');
    });

    var includeTable = LoadTableInclude();
    includeTable.on('click', 'tbody tr', function () {
        var row = includeTable.row(this);
        row.selected() ? row.deselect() : row.select();
        $(this).toggleClass('selected');
    });

    // 按钮点击事件逻辑保持不变
    $('#btnRight').click(function () {
        var selectedRows = excludeTable.rows({ selected: true }).data().toArray();
        var ids = selectedRows.map(row => row.siteCode);
        
        if (ids.length === 0) {
            alert("Please select rows to move.");
            return;
        }
        // 后续数据处理逻辑...
    });
});

额外检查

  • 打开浏览器控制台,确认是否还有undefined相关错误,若有优先排查LoadTableExclude函数是否正确返回Datatable实例。
  • 确保Datatable的列配置中包含siteCode字段,否则row.siteCode会取不到值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:12:43