使用缓存在POST上重新绑定MVC模型的更好方法是什么?

时间:2014-06-17 14:36:09

标签: c# asp.net-mvc caching

我有一个带有get和post动作的控制器,在帖子上检查模型状态是否有效。如果它有效,则页面处理数据并重定向。如果模型状态无效,它将使用模型返回视图。为了确保下拉数据,我需要从数据库中重新填充项目,这意味着我需要再次调用数据库。

有没有办法通过缓存或任何其他方法切断对数据库的调用?

2 个答案:

答案 0 :(得分:2)

问题是浏览器只提交下拉列表的值而不是文本。你可以通过创建一个隐藏元素来解决这个问题,除了值之外还提交文本。

但这是个好主意吗?在我看来,没有。您在浏览器和服务器之间创建额外的网络流量,以节省服务器和数据库之间的流量。在大多数情况下,从客户端检索数据库中的数据会更有效。

此外,数据可能在您将其发送到客户端和第二次发送回来之间发生了变化。

答案 1 :(得分:0)

瑞安有一个好点。我假设您来自WebForms背景,其中所有内容都在视图状态下缓存并发布回服务器。 Asp.net MVC的结构非常适合于一种不同的方法,在这种方法中,重新查询数据库以便向用户提供数据,即下拉列表值。

因此,您只应将用户输入的值发回服务器。这是通过视图模型发生的。我会创建一个接受您的视图模型的常用方法,并将标准数据库拉出并映射到模型。这样,您可以对初始Get请求使用相同的方法,也可以对post-backs验证失败使用相同的方法。

另外,如果我们谈论的是小数据集,那么我肯定会重新查询,因为它并不昂贵。如果下拉列表很大,那么它取决于数据本身。这些数据不经常变化吗?然后将它缓存在静态列表中的Web服务器上可能是可行的。如果它经常变化,那么你可以研究更高级的解决方案,如memcached或redis。