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

时间:2012-07-25 06:13:57

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

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

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

感谢您的帮助..

2 个答案:

答案 0 :(得分: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; }
    }
}

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

int clientId = SessionData.ClientId;

如果您愿意,可以在Session中使用整个对象。

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

答案 1 :(得分:2)

如果您使用的是ASP.NET Forms Authentication,则用户名已存储在cookie中。您可以通过

从Controller访问它
Controller.User.Identity.Name

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

FormsAuthentication.RedirectFromLoginPage

为其指定ID而不是名称。然后可以使用上述方法找到ID,并且不需要额外的会话数据。如果您想在会话中存储内容,请致电

Session["UserID"] = value;

来自您的控制器。