如何在mvc3剃须刀视图中使用会话变量保存数据?
问题描述:
我正在使用Razor在MVC3应用程序中工作。在我的帐户控制器验证用户后,我从数据库中获取用户ClientID。在这里,我想在Session变量中保留ClientID。这是在所有控制器和Razor视图中使用的。如何在mvc3剃须刀视图中使用会话变量保存数据?
我不知道什么是实现this.OR的最佳方法.OR如何在会话变量中持久化数据。以及如何在整个控制器中的会话变量中使用持久数据。
感谢您的帮助..
答
如果您正在使用ASP.NET窗体身份验证,用户名已经存储在cookie中。您可以通过控制器通过
Controller.User.Identity.Name
可以将用户ID存储为用户名。当你打电话像
FormsAuthentication.RedirectFromLoginPage
给它的ID而不是名称。然后可以使用上述方法找到该ID,并且不需要额外的会话数据。如果您想在会话中存储某些内容,请致电
Session["UserID"] = value;
从您的控制器。
+0
感谢您的答复..其实我们正在实施的多租户访问我们的框架。所以我对在控制器中保存数据感到困惑。那么你能否告诉我哪一个更好? – user10489 2012-07-25 07:17:49
答
我平时写一个会话的包装,让我轻而易举地访问它的未来:
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;
这可能是有用的http://www.hanselman.com/blog/TroubleshootingExpiredASPNETSessionStateAndYourOptions.aspx – ManirajSS 2015-02-14 06:57:34