我有一个带有get和post动作的控制器,在帖子上检查模型状态是否有效。如果它有效,则页面处理数据并重定向。如果模型状态无效,它将使用模型返回视图。为了确保下拉数据,我需要从数据库中重新填充项目,这意味着我需要再次调用数据库。
有没有办法通过缓存或任何其他方法切断对数据库的调用?
答案 0 :(得分:2)
问题是浏览器只提交下拉列表的值而不是文本。你可以通过创建一个隐藏元素来解决这个问题,除了值之外还提交文本。
但这是个好主意吗?在我看来,没有。您在浏览器和服务器之间创建额外的网络流量,以节省服务器和数据库之间的流量。在大多数情况下,从客户端检索数据库中的数据会更有效。
此外,数据可能在您将其发送到客户端和第二次发送回来之间发生了变化。
答案 1 :(得分:0)
因此,您只应将用户输入的值发回服务器。这是通过视图模型发生的。我会创建一个接受您的视图模型的常用方法,并将标准数据库拉出并映射到模型。这样,您可以对初始Get请求使用相同的方法,也可以对post-backs验证失败使用相同的方法。
另外,如果我们谈论的是小数据集,那么我肯定会重新查询,因为它并不昂贵。如果下拉列表很大,那么它取决于数据本身。这些数据不经常变化吗?然后将它缓存在静态列表中的Web服务器上可能是可行的。如果它经常变化,那么你可以研究更高级的解决方案,如memcached或redis。