初心者の質問がありますが、これは過去数日間理解しようとしました。誰かが私がプログラミングフローを理解するのを手伝ってくれるほど親切にしてくれることを願っています。
モデルがあるとすると、情報はデータベースに保存されます。
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; }
}
次の学年に昇格する生徒を選択できるように、追加のチェックボックスを付けてビューに表示したいと思います。それを行う1つの方法は、ビューモデルに入れることです。
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" />
}
ただし、現在、次のエラーが発生しています。値をnullにすることはできません。パラメータ名:ソース
Source Error:
foreach (var stuUpdate in list.Where(m => m.promoted))