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

JQuery DataTable中复选框的正确值无法传回MVC控制器

问题解决:DataTable复选框状态与后端接收值不一致

问题核心:你仅修改了页面复选框的DOM显示状态,但未同步更新DataTable内部缓存的status数据。提交时通过table.rows().data()获取的是原始缓存值,导致后端始终收到1。

解决方案步骤:

1. 修复复选框初始渲染逻辑

让复选框的初始选中状态与DataTable的status值绑定:

columns: [
    { "width": "1%", "className":"dt-body-left", 'data': "name" },
    {
        "width": "5%",
        'data': "status",
        "render": function (data, type, row){
            if (type === 'display'){
                // 根据status值设置复选框选中状态,1为选中,0为未选中
                return `<input type="checkbox" class="editor-active" name="chkbx1" ${data === 1 ? 'checked' : ''}>`;            
            }
            return data;               
        },
        className: "dt-body-left"
    },
]

2. 监听复选框点击,实时同步DataTable数据

当用户手动切换复选框时,更新对应行的status值:

// 绑定复选框点击事件
$('#example').on('click', 'input.editor-active', function() {
    const table = $('#example').DataTable();
    const row = table.row($(this).closest('tr'));
    // 根据复选框状态更新status:选中为1,未选中为0
    row.set({
        status: $(this).is(':checked') ? 1 : 0
    }).draw(false); // draw(false)避免全表刷新,仅更新当前行数据
});

3. 优化批量设置状态的按钮代码

原来的按钮仅修改DOM,现在同步更新DataTable内部数据:

$("#changeStatus").on('click', function() {
    const rowId = $("#example").dataTable().fnFindCellRowIndexes("mytest", 0);
    if(rowId.length) {
        const table = $("#example").DataTable();
        const row = table.row(rowId);
        // 更新DataTable的status字段为1
        row.set({ status: 1 }).draw(false);
        // 同步DOM复选框状态(可选,draw后会自动更新)
        const chkbx1 = $(table.cell(rowId, 1).node()).find('input[name="chkbx1"]');
        chkbx1.prop("checked", true);
        console.log("Yes");
    } else {
        console.log("No");
    }
})

4. 提交代码保持不变

原提交逻辑通过table.rows().data()获取数据,现在DataTable内部数据已与复选框状态同步,提交后后端就能收到正确的Status值(0或1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:25:34