保持数据跨越请求MVC3和Razor

时间:2011-07-28 22:16:09

标签: asp.net-mvc-3 razor

我正在开发MVC3和Razor网站。在最终处理数据之前,用户必须通过一些选择来选择他们的方式。

例如: 客户列表 - >版本列表(由客户端过滤) - >等(按版本过滤)

用户选择客户端后,会为客户端选择一个版本。所以我在查询字符串上传递客户端ID。对于版本I的控制器的每种模式,我都会传递客户端ID。在我想要显示客户端名称的视图上,我正在查询客户端的数据库并将其填充到ViewBag中。这看起来非常低效。我觉得我可以使用cookie来保存客户端ID&名。

既然我已经完成了我的版本控制器,那么每个后续的控制器我都会面对相同的模式,但现在我需要同时保留客户端和版本......

在请求中保留此类信息的首选方法是什么?

2 个答案:

答案 0 :(得分:1)

  

这似乎非常低效

这就是为数据库制作和优化的数据=>根据字段查询数据,如果在这些字段上放置索引,它将会非常快。当然,会话,Cookie,缓存是一些常用的技术,可以用来限制对数据库的查询数量,但是你必须假设你可以通过这种方式获得数据的可能 staleness (如果其他一些线程/进程修改了数据库中的数据,你不再得到正确的结果)。

所以在做任何过早的优化之前,我会建议你:锤击你的数据库,直到你发现这实际上是你的应用程序的瓶颈。数据库可能会成为一些非常高流量的应用程序中的瓶颈,你应该采用一种相关的技术(当然,或者在一些写得不好的应用程序中,但暂时不要排除这种可能性)。

答案 1 :(得分:0)

您应该使用TempData,它允许您在当前和下一个HTTP请求之间传递数据。请务必记住它使用会话。

Greg Shackles有一篇关于TempData here

的文章

看到类似的问题MVC3 multi step form - How to persist model object