【问题标题】:How to Persist data using session variable in mvc3 razor view?如何在 mvc3 razor 视图中使用会话变量持久化数据?
【发布时间】:2012-07-25 15:24:02
【问题描述】:

我正在使用 Razor 处理 MVC3 应用程序。在验证用户后,在我的帐户控制器中,我从数据库中获取用户 ClientID。在这里,我想将 ClientID 保留在 Session 变量中。它在所有控制器和 Razor 视图中使用。

我不知道实现这个的最佳方法是什么。或者如何在会话变量中保存数据。以及如何在整个控制器中使用会话变量中的持久数据。

感谢您的帮助..

【问题讨论】:

标签: asp.net-mvc-3 session-variables


【解决方案1】:

我通常会编写一个 Session 包装器,以便将来轻松访问它:

public class SessionData
{
    const string ClientId_KEY = "ClientId";

    public static int ClientId
    {
        get { return HttpContext.Current.Session[ClientId_KEY] != null ? (int)HttpContext.Current.Session[ClientId_KEY] : 0; }
        set { HttpContext.Current.Session[ClientId_KEY] = value; }
    }
}

之后,您可以像这样从任何地方访问它:

int clientId = SessionData.ClientId;

如果你愿意,你可以像这样在 Session 中使用整个对象。

或者你可以这样设置:SessionData.ClientId = clientId;

【讨论】:

  • 感谢您的回复...基本上我们正在为我们的框架实施多租户访问。那么Session是好方法吗?我正在根据数据库中的登录用户获取 ClientID。那么如何将 ClientID 绑定到 Session 变量中呢?
  • 我不知道您项目的所有含义和要求,但到目前为止我没有发现使用 Session 有任何问题。我已经更新了我的答案,以展示如何使用包装器在 Session 中设置 ClientId。
  • 写一个包装器来访问会话有什么好处
  • 您只有一个入口点。易于维护。智能感知
【解决方案2】:

如果您使用的是 ASP.NET 表单身份验证,则用户名已存储在 cookie 中。您可以通过

从控制器访问它
Controller.User.Identity.Name

可以将用户 ID 存储为用户名。当你打电话给

FormsAuthentication.RedirectFromLoginPage

给它 ID 而不是名称。然后可以使用上述方法找到 ID,不需要额外的会话数据。如果你想在会话中存储一些东西,只需调用

Session["UserID"] = value;

来自您的控制器。

【讨论】:

  • 感谢您的回复。实际上我们正在为我们的框架实现多租户访问。所以我对跨控制器持久化数据有点困惑。那么你能建议我哪种方法更好吗?
猜你喜欢
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多