Asp.net-Mvc
具有 SelectList(s) 最佳實踐的 ASP.NET MVC ViewModel
我注意到在 NerdDinner 應用程序中,如果 ModelState 對於晚餐無效,它只會返回模型的視圖:
if (ModelState.IsValid) { ... return RedirectToAction("Details", new { id=dinner.DinnerID }); } return View(dinner);但是,在我的應用程序中,模型(在這種情況下為視圖模型)包含多個 SelectList。這些列表此時沒有實例化,因為這個視圖模型只是從表單送出中填充的。在將 SelectLists 發送回使用者之前,推薦的重新填充此 SelectLists 的方法是什麼?
這就是我希望我的控制器做的事情:
public ActionResult Save(MyModel model) { if (ModelState.IsValid) { businessClass.Save(model); return RedirectToAction("Index", "Home"); } // This won't work because model has uninstantiated SelectLists return View("MyView", model); }如果 ModelState 無效,我不想將模型發送到我的業務邏輯,但是將 SelectList 填充程式碼放在我的控制器中似乎沒有意義。我是否應該在我的業務邏輯中創建一個公共方法,僅用於在我的視圖模型上執行此類操作?
我個人喜歡保持簡單:-
[HttpGet] public Edit(int id) { EditForm form = new EditForm(); // Populate from the db or whatever... PopulateEditPageSelectLists(form); return View(form); } [HttpPost] public Edit(EditForm form) { if (ModelState.IsValid) { // Do stuff and redirect... } PopulateEditPageSelectLists(form); return View(form); } public void PopulateEditPageSelectLists(form) { // Get lookup data from the db or whatever. }如果填充選擇列表的邏輯是各種瘋狂的,那麼可能值得轉移到一個單獨的類或其他任何類,但作為第一步,這是最好的起點。