我正在学习 MVC4+EF 5.0 项目,我使用 VS2012 默认模板创建空白项目并将数据库搭建为 *.edmx 模型,以及用于编辑在哪个公司工作的员工的编辑视图。
我遇到的一个问题是当用户输入失败并返回到它时,在编辑视图(下拉)中维护 SelectList。
DropDownList 从控制器绑定 ListItem:
编辑.cshtml
@Html.DropDownListFor(model => model.CompanyID, (SelectList)ViewData["CompanySelectList"])
成员控制器.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 吗?
我关心使用 session 来存储它,但害怕打破 MVC 设计模式。
我的英语不好,很抱歉造成混乱。谢谢。