在多个asp.net MVC页面上维护(非关键)状态的正确方法

时间:2009-12-08 14:53:50

标签: asp.net-mvc

这听起来像是一个矛盾,或者说是一种矛盾,但我希望它实际上不是。

背景:

我需要在整个用户登录中保留一些首选项。这些首选项主要影响某些内容的查看方式,尽管它们可能会传递到控制器层来完成此操作。任何这些用户/会话首选项都不能直接影响数据。

问题:

如何在MVC设置中临时存储页面/控制器中的数据,以便控制器在方便时可以使用它(不依赖于它)。

我正在考虑会话,但是在会话和asp.net上搜索MVC会在tempdata上找到很多材料,这不是我需要的。相反,非必要数据的每个用户会话的字典将是理想的。

由于 亚当

4 个答案:

答案 0 :(得分:3)

选项1.您将其存储在客户端。将这些设置放在cookie中,它们将在以下每个请求中提供。

选项2.您将其存储在服务器端。将它放在会话中但将其绑定到用户ID,也可以轻松访问它。

选项3.将其存储在数据库中。因此,请在每个请求中从db加载这些设置。或者,缓存它。

答案 1 :(得分:0)

我不相信有任何理由不使用会话。我很想说,当页面需要一些东西时,它就不再是“暂时的”了。

答案 2 :(得分:0)

如果需要,您可以使用MS的分布式缓存velocity,由数据库表支持。以这种方式维护您的设置只需要一些额外的内存,并且不应该使用额外的请求使您的服务器陷入困境。如果最近未使用这些设置,或者在缓存中放置了足够的新设置,则设置也将过期。

速度范围内还有一个session provider可以做你想做的事。

答案 3 :(得分:0)

在控制器/视图页面上使用Session对象可能就是您想要做的。通常,我要做的是将用户选择保留到数据库(首选项表),然后使用Session作为用户的Preferences对象的缓存。我经常将这个属性作为一个基本控制器的属性,该控制器从Session(如果存在)延迟加载,或者数据库,根据需要填充会话。