簡體   English   中英

在MVC5中驗證時,將數據保留在ViewModel中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM