在MVC5中验证时,在ViewModel中保留数据

时间:2015-03-31 10:51:05

标签: c# asp.net-mvc validation

在我的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中保留一些数据(或有效地重新填充数据)的最佳方式(或为了不主观:任何方式)是什么?

1 个答案:

答案 0 :(得分:1)

如果要求您不回到数据库并且您100%确信数据不会发生变化(即这是状态列表而不是订单列表或其他内容)那么您可以将集合添加到会话变量中。这是一篇体面文章的链接:

https://code.msdn.microsoft.com/How-to-create-and-access-447ada98

话虽这么说,我通常只是去数据库并再次获取数据。如果第二次这样做会导致巨大的性能问题,那么很可能是第一次出现性能问题,您应该处理问题而不是症状。