在我的asp.NET MVC5应用程序中,我有一个控制器,它提供了与视图模型强类型的视图。此视图模型具有SelectList
属性(等等),并且所述控制器从所述数据库提供上创建数据:在MVC5中验证时将数据保存在ViewModel中
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
中的一些数据(或有效地重新填充)?
您应该返回并从数据库中再次获取'SelectList'的数据。你为什么认为这很糟糕? – 2015-03-31 11:07:38
如果您觉得性能是一个问题,您可以缓存选择列表:[stackoverflow.com/questions/18703958/persist-selectlist-in-model-on-post](http://stackoverflow.com/questions/18703958/persist -selectlist-in-model-on-post) – markpsmith 2015-03-31 11:24:05
@Stephen Muecke:我总是有这样的印象,出于性能考虑,应尽量减少数据库抓取。这似乎是不必要的,因为数据在验证之间不应该改变。 – EluciusFTW 2015-03-31 11:30:02