我正在學習MVC4 + EF 5.0項目,我使用VS2012默認模板創建空白項目並搭建數據庫到* .edmx模型,並使用編輯視圖編輯工作人員工作在哪家公司。ASP.NET MVC,保持動態selectList的正確方法?
我遇到一個問題,就是當用戶輸入失敗並返回時,在編輯視圖(下拉菜單)中維護SelectList。
DropDownList控件從控制器綁定列表項:
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也無濟於事。
所以當Post to Edit Action發佈時,我需要再次構建SelectList嗎?
我關注使用session來存儲那個,但是打破了MVC設計模式。
我的英文不好,抱歉讓人混淆。 謝謝。
感謝您的回答,但它是否打破了ASP.NET MVC機制或概念? – Cheung 2013-03-28 02:30:53
,因爲從數據庫再次填充它似乎很重複的任務。 – Cheung 2013-03-28 02:43:25
您可以在視圖模型的構造函數中定義列表的總體,並且不要在實際編輯或後編輯視圖中重複它。 – 2013-03-28 04:03:44