在 MVC 中使用表单集合时,只有第一行 asp.net 插入



我试图获取表单集合值并插入到数据库中。但是我面临的典型问题是第一行仅插入到数据库中。我的代码如下:

[HttpPost]
    public ActionResult Create(FormCollection Students)
    {
        if (ModelState.IsValid)
        {
            string[] names = Students["name"].Split(char.Parse(","));
            string[] dnos = Students["dno"].Split(char.Parse(","));
            string[] adds = Students["address"].Split(char.Parse(","));
            student stds = new student();
            for (var i = 0; i < names.Length; i++)
            {
                stds.name = names[i];
                stds.dno = dnos[i];
                stds.address = adds[i];
                stds.active = true;
                db.students.AddObject(stds);
            }
            db.SaveChanges();
            return RedirectToAction("Index");  
        }
        return View(Students);
    }

请帮忙。

在循环中移动保存更改并student stds

            for (var i = 0; i < names.Length; i++)
            {
                student stds = new student();
                stds.name = names[i];
                stds.dno = dnos[i];
                stds.address = adds[i];
                stds.active = true;
                db.students.AddObject(stds);
                db.SaveChanges();
            }

student stds = new student();放进 for 循环中。我想,它没有刷新。

从您的帖子中很难弄清楚您使用的数据库是什么,但在这种情况下经常出错 - 您不控制主键。所以你在循环中添加学生(stds),但它被初始化为一些不可预测的(至少使用 NULL),但第二次尝试会发现这样的记录已经存在。

这里定义的学生类似乎是一个引用对象,因此每次您在 for 循环中修改它时,它总是修改前面创建的单个对象实例。您需要在每个循环中都有新对象,例如:

        for (var i = 0; i < names.Length; i++)
        {
            student stds = new student();    
            stds.name = names[i];
            stds.dno = dnos[i];
            stds.address = adds[i];
            stds.active = true;
            db.students.AddObject(stds);
        }

最新更新