我试图获取表单集合值并插入到数据库中。但是我面临的典型问题是第一行仅插入到数据库中。我的代码如下:
[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);
}