[英]Keep data in ViewModel when validating in MVC5
在我的asp.NET MVC5應用程序中,我有一個控制器,該控制器提供一個與視圖模型強類型化的視圖。 此視圖模型具有SelectList
屬性(以及其他屬性),控制器在創建數據庫時提供數據:
public ActionResult Simulation() {
var SimVM = new SimulationVM(
StrategyRepository.GetStrategies().Select(n => n.Name),
);
return View(SimVM);
}
然后,將SelectList
用作表單中DropDown
選項的數據源。 HttpPost
方法執行一些數據驗證,即
[HttpPost]
public ActionResult Simulation(SimulationVM _simVM) {
if (ModelState.IsValid) {
// ...
}
else return View(_simVM);
}
因此,使用上面的代碼, DropDown
數據為空,因為在發布時, SimulationVM
對象是新創建的。 使用Html.HiddenFor
的通常技巧不適用於集合。
當然,我可以返回並再次從數據庫中獲取數據,但這似乎是不好的,因為要進行簡單的驗證(例如確認數據)就可以從數據庫中獲取數據,而我知道數據沒有改變。
什么是將某些數據保留在ViewModel
(或有效地重新填充)的最佳方法(或為了避免主觀:任何方法)?
如果要求您不返回數據庫,並且100%確信數據不會更改(即,這是狀態列表,而不是訂單列表或其他內容),則可以添加集合會話變量。 這是一篇體面文章的鏈接:
https://code.msdn.microsoft.com/How-to-create-and-access-447ada98
話雖如此,我通常只是去數據庫並再次獲取數據。 如果第二次這樣做會導致巨大的性能問題,則很可能是第一次導致性能問題,因此您應該處理此問題而不是症狀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.