.NET MVC中如何通过AJAX请求将整型数组存入数据库
标签ID数组存入数据库实现方案
前端代码修复
原AJAX请求需要添加traditional: true配置,保证数组参数能被后端正确识别,修改后代码如下:
$(function () { $.validator.setDefaults({ submitHandler: function (form, e) { e.preventDefault(); // 确保取值为数组格式 var skillIds = $("#std_skill_id").val(); var skillsdata = { skills: skillIds } console.log(skillsdata); $.ajax({ async: true, type: 'POST', url: "/Dashboard/Skills", data: skillsdata, traditional: true, // 关键配置,适配ASP.NET MVC数组参数接收规则 success: function (data) { console.log(data) if(data.success){ alert("标签保存成功") } } }) } }); })
后端控制器代码修复
原有代码存在以下错误:
- Action方法参数括号缺失
- 循环内错误将整个数组赋值给单个Skill实体的
std_skill_id字段 SaveChanges放在循环内,仅保存第一条数据就直接返回,后续数据无法入库
修改后的代码如下:
// AJAX请求场景下推荐返回JSON,需要跳转页面可保留返回View public ActionResult Skills(string[] skills) { using (SkillContext dbskill = new SkillContext()) { // 可选逻辑:如果是关联用户的标签,先删除该用户原有标签避免重复存储 // var currentUserId = 获取当前登录用户ID; // var oldUserSkills = dbskill.Skill.Where(s => s.user_id == currentUserId).ToList(); // dbskill.Skill.RemoveRange(oldUserSkills); foreach (var skillId in skills) { Skill Skilltag = new Skill(); // 给单个字段赋值当前循环的标签ID,而非整个数组 Skilltag.std_skill_id = skillId; // 如需关联用户,在此处给用户ID字段赋值 // Skilltag.user_id = currentUserId; dbskill.Skill.Add(Skilltag); } // 所有数据添加完成后统一提交,减少数据库交互次数 int saveCount = dbskill.SaveChanges(); return Json(new { success = saveCount > 0, msg = saveCount > 0 ? "保存成功" : "保存失败" }); } }
注意事项
- 确认
Skill实体类的std_skill_id字段类型为string,和传入的标签ID类型匹配 - 如果标签ID为数字类型,可将Action参数改为
int[] skills,同时对应修改实体字段类型为int - 如有去重需求,可先对传入的skills数组做去重处理再循环入库
内容的提问来源于stack exchange,提问作者Malik Khabab
相关产品推荐
相关产品推荐

