【问题标题】:Proper way to maintain (non-critical) state accross multiple asp.net MVC Pages跨多个 asp.net MVC 页面维护(非关键)状态的正确方法
【发布时间】:2009-12-08 14:53:50
【问题描述】:

这听起来像是一个自相矛盾的术语,或者是火焰诱饵,但我希望它不是真的。

背景:

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

问题:

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

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

谢谢 亚当

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

    选项 2。您将其存储在服务器端。放到session里面绑定user id,也可以很方便的访问。

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

    【讨论】:

      【解决方案2】:

      我认为没有充分的理由不使用会话。我很想说当页面需要某些东西时,它就不再是“临时的”。

      【讨论】:

        【解决方案3】:

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

        velocity 中还有一个session provider,可以做你想做的事。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多