1

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

[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);
    }

请帮助解决这个问题。

4

4 回答 4

3

移动保存循环中的更改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();
            }
于 2013-10-30T08:31:37.177 回答
0

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

于 2013-10-30T08:33:01.927 回答
0

这里定义的学生类似乎是一个引用对象,所以每次在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);

        }
于 2013-10-30T08:33:58.423 回答
0

放入student stds = new student();for循环。我认为它没有刷新。

于 2013-10-30T08:31:30.043 回答