C# ASP MVC在不重新查询数据库的情况下重新填充下拉列表的方法

C# ASP MVC在不重新查询数据库的情况下重新填充下拉列表的方法,c#,asp.net-mvc,drop-down-menu,validation,C#,Asp.net Mvc,Drop Down Menu,Validation,问题 我有一个视图模型列表。大多数视图模型都有下拉输入。当ModelState有效时,一切正常,我能够处理数据输入,但是当表单验证中出现错误时,一切都变得一团糟,因为下拉菜单需要重新填充数据。这有点问题,因为每个视图模型都有不同的下拉列表 尝试的解决方案 我认为每个视图模型和get都是数据库中相应的域模型,但这似乎不是很有效(特别是因为可能有大约30个字段,每个字段可能有不同的下拉列表!) 如果表单验证失败,是否仍要保留下拉列表 如果表单验证失败,是否仍要保留下拉列表 没有内置的东西。一种可能是

问题

我有一个视图模型列表。大多数视图模型都有下拉输入。当ModelState有效时,一切正常,我能够处理数据输入,但是当表单验证中出现错误时,一切都变得一团糟,因为下拉菜单需要重新填充数据。这有点问题,因为每个视图模型都有不同的下拉列表

尝试的解决方案

我认为每个视图模型和get都是数据库中相应的域模型,但这似乎不是很有效(特别是因为可能有大约30个字段,每个字段可能有不同的下拉列表!)

如果表单验证失败,是否仍要保留下拉列表

如果表单验证失败,是否仍要保留下拉列表


没有内置的东西。一种可能是更改这些数据库调用的结果,以避免每次都碰到它。因此,您只需要使用从缓存返回列表的方法,或者如果不存在,则查询数据库,将结果列表存储到缓存并返回结果。然后,如果发生验证错误,您将调用这些方法来重新填充DropDownList。这是一种简单而有效的方法,尤其是对于值不经常更改的下拉列表。

视图中有30个下拉列表@也许有可能。现在只有5-10分钟。并不是每个视图模型都必须显示下拉列表,但我只是在做最坏的打算。好的,唯一的问题是,现在我在映射代码中填充下拉列表,当我转到DomainModel到ViewModel时。从设计角度来看,在自动映射代码中填充下拉列表是一个坏主意,还是应该由控制器负责?不,在映射代码中填充下拉列表不是一个坏主意。这是正确的方法。只是当您从控制器调用映射方法时,会将控制器检索到的域模型的缓存版本传递给它。