Ser*_*ril 5 c# asp.net session
我对ASP/C#有点新,我遇到了会话变量的问题(可能很简单).我的项目有一个Site.Master,其中会话变量在Page_Load方法下设置,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
if ((Session)["UserID"]==null || (Session)["UserID"].ToString() == "")
{
(Session)["UserID"] = HttpContext.Current.User.Identity.Name.ToString();
SqlDataReader dr = Sprocs.GetPermissionGroups();
string groupList = "";
while (dr.Read())
{
if (groupList != "")
{
groupList = groupList + "|" + dr["WG_Group"].ToString();
}
else
{
groupList = dr["WG_Group"].ToString();
}
}
dr.Close();
if (groupList != "")
{
(Session)["UserGroups"] = groupList;
}
}
Run Code Online (Sandbox Code Playgroud)
这确实有效.如果我将会话变量'UserGroups'转储到此方法中的标签或其他内容,它会正确显示变量内容.
所以,当我尝试访问同一个会话变量时,我的问题在于另一个页面(比如default.aspx).在另一页的Page_Load方法中,我尝试这样做:
protected void Page_Load(object sender, EventArgs e)
{
string GroupList = HttpContext.Current.Session["UserGroups"].ToString();
//some code with the variables here
}
Run Code Online (Sandbox Code Playgroud)
这始终失败,并且"对象引用未设置为对象的实例".错误.我试图让Session变量错误吗?我试过了
string GroupList = Session["UserGroups"].ToString();
Run Code Online (Sandbox Code Playgroud)
这也是同样错误的错误.
string GroupList = (string)(Session["UserGroups"]);
Run Code Online (Sandbox Code Playgroud)
这总是返回一个空字符串.
我究竟做错了什么?
谢谢!
您在Page_Load方法中使用的语法我甚至不希望编译.无论如何,问题是您没有使用该密钥设置Session,因此它将返回null.当你调用ToString()null时,你会得到异常.在你的第二个例子中:
string groupList = (string)(Session["UserGroups"])
Run Code Online (Sandbox Code Playgroud)
那就是将null转换为null string,这会产生一个空字符串(因此不会导致异常).
您应该能够Page_Load像这样重写您的实现:
string sessionUserId = Session["UserId"] as string;
if(string.IsNullOrEmpty(sessionUserId))
{
Session["UserId"] = HttpContext.Current.User.Identity.Name.ToString();
SqlDataReader dr = Sprocs.GetPermissionGroups();
string groupList = "";
while (dr.Read())
{
if (groupList != "")
{
groupList = groupList + "|" + dr["WG_Group"].ToString();
}
else
{
groupList = dr["WG_Group"].ToString();
}
}
dr.Close();
Session["UserGroups"] = groupList;
}
Run Code Online (Sandbox Code Playgroud)
然后,在稍后访问会话变量时,请执行以下操作:
string userGroup = Session["UserGroups"] as string;
Run Code Online (Sandbox Code Playgroud)
这是尝试将会话中的任何存储桶转换为字符串的安全方法.如果密钥不存在,或者值不是字符串,您将得到null.否则,您将从该哈希中获取字符串.
| 归档时间: |
|
| 查看次数: |
39143 次 |
| 最近记录: |