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

.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("标签保存成功")
                    }
                }
            })
        }
    });
})

后端控制器代码修复

原有代码存在以下错误:

  1. Action方法参数括号缺失
  2. 循环内错误将整个数组赋值给单个Skill实体的std_skill_id字段
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:54:04