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