如何获取复选框选中值转为字符串并作为SQL存储过程参数传入?
如何将复选框选中值转为字符串并作为存储过程参数传入?
一、前端优化:准确收集选中的Reference No.并拼接成字符串
首先优化jTable的复选框渲染,把ref_no绑定到复选框的自定义属性中,避免依赖列位置导致的错误:
fields: { Tag: { sorting: false, title: function (data) { return '<input type="checkbox" class="chkAll">'; }, width: '2.5%', display: function (data) { // 将ref_no存入data属性,方便后续获取 return `<input type="checkbox" class="chk" data-refno="${data.record.ref_no}">`; } }, // 其他字段保持不变... }
然后修改btnReassign的点击事件,收集所有选中的ref_no并拼接成逗号分隔的字符串:
$("#btnReassign").button().click(function () { // 收集所有选中的ref_no var selectedRefNos = []; document.querySelectorAll('input.chk:checked').forEach(chk => { var refNo = chk.getAttribute('data-refno'); if (refNo) { selectedRefNos.push(refNo); } }); // 转为逗号分隔的字符串 var refNosStr = selectedRefNos.join(','); // 这里可以将字符串存入隐藏域,用于后续弹窗提交或直接调用后端接口 $("#hdnRefNo").val(refNosStr); // 示例:显示重新分配弹窗 // $("#dvReassignModalPopUp").show(); });
二、后端创建WebMethod接收参数并调用存储过程
添加一个新的WebMethod来处理重新分配请求,接收拼接好的refNos字符串以及其他需要修改的字段:
[WebMethod(EnableSession = true)] public static object ReassignAccounts(string refNos, string newRM, string newSeniorReviewer) { try { // 调用存储过程 using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["YourConnString"].ConnectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand("sp_ReassignAccounts", conn); cmd.CommandType = CommandType.StoredProcedure; // 添加参数 cmd.Parameters.AddWithValue("@RefNos", refNos); cmd.Parameters.AddWithValue("@NewRM", newRM); cmd.Parameters.AddWithValue("@NewSeniorReviewer", newSeniorReviewer); cmd.ExecuteNonQuery(); } return new { Result = "OK", Message = "Accounts reassigned successfully." }; } catch (Exception ex) { return new { Result = "ERROR", Message = ex.Message }; } }
三、SQL存储过程处理字符串参数
使用STRING_SPLIT(适用于SQL Server 2016及以上版本)拆分传入的字符串参数,更新对应账户信息:
CREATE PROCEDURE sp_ReassignAccounts @RefNos NVARCHAR(MAX), @NewRM NVARCHAR(100), @NewSeniorReviewer NVARCHAR(100) AS BEGIN SET NOCOUNT ON; -- 更新选中的账户 UPDATE NewAccount SET rmName = @NewRM, SeniorReviewer = @NewSeniorReviewer WHERE ref_no IN (SELECT value FROM STRING_SPLIT(@RefNos, ',')) END
注意事项
- 若SQL Server版本低于2016,需自定义字符串拆分函数替代
STRING_SPLIT。 - 前端可添加校验逻辑,确保至少选中一个账户后才允许触发操作。
- 后端已使用参数化查询,无需担心SQL注入风险。
内容的提问来源于stack exchange,提问作者Jhonn Matthew Calvelo
相关产品推荐
相关产品推荐

