在我的asp.net MVC项目中,我有一个会话助手类,用于设置和检索会话值。这是班级:
public class SessionManager
{
public static string UserName
{
get
{
return HttpContext.Current.Session[SessConstants.UName] ;
}
set
{
HttpContext.Current.Session[SessConstants.UName] = value;
}
}
}
正如您所看到的,属性是静态的。我在我的代码中使用它如下:
//For setting values
SessionManager.UserName = "";
//For retrieving values
strLoggedinUser = SessionManager.UserName;
问题:
思考?
感谢您的时间......
答案 0 :(得分:1)
这是一个想法。 (可能不完全是你问题的答案,但我认为Maess在评论中处理了这个问题。)
为什么不使用扩展方法,而不是使用单独的SessionManager
类来封装会话状态变量?
public static class SessionExtensionMethods
{
private const string SessionUserNameKey = "UName";
// set the session value (pass null to remove)
public static void UserName(this HttpSessionStateBase session, string value)
{
if (value == null) session.Remove(SessionUserNameKey);
else session[SessionUserNameKey] = value;
}
// get the session value
public static string UserName(this HttpSessionStateBase session)
{
var value = session[SessionUserNameKey];
return value != null ? value.ToString() : null;
}
}
然后,在你的控制器中,你可以这样做以获得&设置会话值:
// set the value
Session.UserName("SomeUserName");
// get the value
var sessionUserName = Session.UserName();
// clear the value
Sesssion.UserName(null);
这里不需要基本控制器类。您需要做的就是确保您的控制器引用声明SessionExtensionMethods
类的名称空间。