私はMVC4 + EF 5.0プロジェクトで学習しています.VS2012のデフォルトテンプレートを使用して空のプロジェクトを作成し、データベースを* .edmxモデルに足場し、どの会社で働いているスタッフを編集するために使用する編集ビューを使用しています.
ユーザーが入力に失敗して戻ったときに、編集ビュー (ドロップダウン) で SelectList を維持するときに問題が発生します。
DropDownList は、コントローラーから ListItem をバインドします。
Edit.cshtml
@Html.DropDownListFor(model => model.CompanyID, (SelectList)ViewData["CompanySelectList"])
MemberController.cs
[HttpGet]
public ActionResult Edit(int SelectedCompanyID = 0, int StaffID = 0)
{
IQueryable<company_benefit> companys = from c in db.company where c.ID.Equals(CompanyID) select c ;
ViewData["CompanySelectList"] = new SelectList(companys, "ID", "Name", SelectedCompanyID);
staff s = db.staff.Find(StaffID);
if (s == null)
{
return HttpNotFound();
}
return View(s);
}
[HttpPost]
public ActionResult Edit(staff s)
{
if (ModelState.IsValid)
{
db.Entry(s).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index"); //Edit Success
}
return View(s); //Edit Fail
}
誰かが無効なデータを含むフォームを送信して入力に失敗すると、ビューが返されます。ただし、SelectList は ViewData からバインドされるため、ページが読み込まれると ViewData がなくなり、viewdata の動作であり、TempData に変更しても役に立ちません。
編集アクションに投稿するときに、SelectList を再度作成する必要がありますか?
セッションを使用してそれを保存することに関心がありますが、MVC 設計パターンに違反することを恐れています。
私の英語は上手ではありません。混乱してすみません。ありがとうございます。