如何在mvc3 razor视图中使用会话变量来保存数据?

use*_*489 7 session-variables asp.net-mvc-3

我正在使用Razor进行MVC3应用程序.验证用户后,在我的帐户控制器中,我从数据库获取用户ClientID.在这里,我想在Session变量中持久化ClientID.这是在所有控制器和Razor视图中使用的.

我不知道实现this的最佳方法是什么.如何在会话变量中保存数据.以及如何在控制器中的会话变量中使用持久化数据.

谢谢你的帮助..

Dmi*_*try 18

我通常会编写一个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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,您可以从以下任何地方访问它:

int clientId = SessionData.ClientId;
Run Code Online (Sandbox Code Playgroud)

如果你想,你可以在Session中使用整个对象.

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


BC.*_*BC. 2

如果您使用 ASP.NET 表单身份验证,则用户名已存储在 cookie 中。您可以通过以下方式从控制器访问它

Controller.User.Identity.Name
Run Code Online (Sandbox Code Playgroud)

可以将用户 ID 存储为用户名。当你调用类似的东西时

FormsAuthentication.RedirectFromLoginPage
Run Code Online (Sandbox Code Playgroud)

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

Session["UserID"] = value;
Run Code Online (Sandbox Code Playgroud)

来自您的控制器。