我无法写入会话变量。
这是我的源代码:
public class CurrentUser
{
public static string UserName
{
get
{
if (HttpContext.Current.Session["UserName"] != null)
return (string)HttpContext.Current.Session["UserName"];
else
return null;
}
set
{
HttpContext.Current.Session["UserName"] = value;
}
}
}
我把这个类叫做写:
public class SQLGetData
{
public UserDC LogIn()
{
UserDC userDC = new UserDC();
CurrentUser.Id = 1;
CurrentUser.UserName = "Admin";
userDC.id = 1;
userDC.UserName = "Admin";
return userDC;
}
}
当我想打电话时(MasterPage.aspx):
Label1.Text = CurrentUser.Id + CurrentUser.UserName;
结果: CurrentUser.Id 1 且CurrentUser.UserName NULL 。
为什么CurrentUser.UserName为NULL? 如何修改此公共字符串UserName以进行编写?
答案 0 :(得分:0)
从你分享的代码中,我们无法真正帮助你,因为我们只能猜测发生了什么。
我假设您的CurrentUser类具有Id属性,其代码与Username类似。 Id属性按预期工作,但不是用户名...这听起来确实很可能。
你能分享你班级的完整代码吗?或者至少是Id属性的代码?
然后,它也有助于理解从哪里调用SQLGetData类。身份验证如何运作?
答案 1 :(得分:0)
我对这种会话空方案的智慧表明 - 您的应用程序中发生了隐藏错误,但未发现。代码中的任何异常都会终止会话,并且可能会继续使用新会话,因此值为null ...
最佳方法,使用debug运行vs ide环境代码 - >例外菜单,在所有异常处理程序上运行并运行应用程序的几个场景,最终你会发现隐藏的错误从简单的错误开始,比如convertToInt或类似的引用错误,这会导致会话变为空...但是我认为事情没有在“错误”页面中出错,但通过上面的“DEBUG”找到了所有异常ON选项。
希望它有所帮助! HydTechie
答案 2 :(得分:-1)
您应首先使用
将“UserName”引入会话HttpContext.Current.Session.Add("UserName", value)
在你的二传手中。
public class CurrentUser
{
public static string UserName
{
get
{
if (HttpContext.Current.Session["UserName"] != null)
return (string)HttpContext.Current.Session["UserName"];
else
return null;
}
set
{
if (HttpContext.Current.Session["UserName"] == null)
HttpContext.Current.Session.Add("UserName", value);
else
HttpContext.Current.Session["UserName"] = value;
}
}
}
完成后,它应该像你写的那样工作。