在我的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
中保留一些数据(或有效地重新填充数据)的最佳方式(或为了不主观:任何方式)是什么?
答案 0 :(得分:1)
如果要求您不回到数据库并且您100%确信数据不会发生变化(即这是状态列表而不是订单列表或其他内容)那么您可以将集合添加到会话变量中。这是一篇体面文章的链接:
https://code.msdn.microsoft.com/How-to-create-and-access-447ada98
话虽这么说,我通常只是去数据库并再次获取数据。如果第二次这样做会导致巨大的性能问题,那么很可能是第一次出现性能问题,您应该处理问题而不是症状。