Asp.net-Mvc

具有 SelectList(s) 最佳實踐的 ASP.NET MVC ViewModel

  • April 8, 2015

我注意到在 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.
}

如果填充選擇列表的邏輯是各種瘋狂的,那麼可能值得轉移到一個單獨的類或其他任何類,但作為第一步,這是最好的起點。

引用自:https://stackoverflow.com/questions/7893448