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

