我有一个新手问题,过去几天我一直试图理解。希望有人可以帮助我理解编程流程。
假设我有一个模型,信息存储在数据库中:
public class Student
{
public int studentID { get; set; }
public string studentName { get; set; }
public strin studentGrade {get; set; }
}
public class StudentDBContext : DbContext
{
public DbSet<Student> Students { get; set; }
}
我想将它显示到视图中,并带有额外的复选框,以便我可以选择要提升到下一年级的学生。我读到一种方法是放入视图模型:
public class StudentViewModel
{
public bool promoted { get; set; }
public Student stu { get; set; }
}
但我坚持这是这样做的方式吗?如果是的话,你如何将它放入视图中,它将显示所有学生,旁边有一个复选框。之后,我想更新勾选复选框的学生的所有成绩。例如:
学生 A、学生 B、学生 D 从 1 年级提升到 2 年级。所以我想显示学生,勾选学生 A、B 和 D 并提交以更新成绩。
一步一步的例子将不胜感激。
更新1:
控制器:
[HttpGet]
public ViewResult CheckBox()
{
var studentViewModels = db.Students.Select(m => new StudentViewModel()
{
stu = m
}).ToList();
return View(studentViewModels);
}
[HttpPost]
public ActionResult CheckBox(IList<studentViewModel> list)
{
foreach (var stuUpdate in list.Where(m => m.promoted))
{
var stuRow = db.Students.Find(stuUpdate.stu.studentID);
stuRow.studentName = stuRow.studentName + "1";
db.Entry(stuRow).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("CheckBox");
}
return RedirectToAction("CheckBox");
}
看法:
@model IList<School.ViewModels.StudentViewModel>
@using (Html.BeginForm())
{
<table>
<tr>
<th>
</th>
<th>
student ID
</th>
<th>
student name
</th>
<th>
student grade
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.CheckBoxFor(modelItem => item.promoted)
@Html.HiddenFor(modelItem => item.stu.studentID)
</td>
<td>
@Html.DisplayFor(modelItem => item.stu.studentID)
</td>
<td>
@Html.DisplayFor(modelItem => item.stu.studentName)
</td>
<td>
@Html.DisplayFor(modelItem => item.stu.studentGrade)
</td>
</tr>
}
</table>
<input type="submit" value="save" />
}
但是目前遇到以下错误:值不能为空。参数名称:来源
Source Error:
foreach (var stuUpdate in list.Where(m => m.promoted))