这是我在页面加载时运行的代码:
protected void Page_Load(object sender, EventArgs e)
{
DisableChaching();
if (Request.Cookies["UserName"] == null)
{
if (Session["UserName"] == null)
{
Response.Redirect("~/Default.aspx");
}
else if (Session["AccessLevel"].ToString().Equals("2"))
{
Response.Redirect("~/Default.aspx");
}
}
else if (Session["AccessLevel"].ToString().Equals("2"))
{
Response.Redirect("~/Default.aspx");
}
if (!IsPostBack)
{
LoadControls();
BindGrid();
}
}
有时当我尝试将一些数据保存到数据库并且出现错误时,我尝试通过单击我的保存按钮重新保存数据,我收到此错误:
如果代码:,请在以下行中对象引用未设置为对象的实例
else if (Session["AccessLevel"].ToString().Equals("2"))
为什么我收到此错误?
这是我在登录用户控件中的代码,其中ChR是记住用户的复选框:
if (ChR.Checked == true)
{
Response.Cookies["UserName"].Value = txtUserName.Text.Trim();
Response.Cookies["UserName"].Expires = DateTime.Now.AddMonths(2);
Response.Cookies["AccessLevel"].Value = member.AccessLevel.ToString();
Response.Cookies["AccessLevel"].Expires = DateTime.Now.AddMonths(2);
Response.Cookies["FirstName"].Value = member.FirstName;
Response.Cookies["FirstName"].Expires = DateTime.Now.AddMonths(2);
Response.Cookies["LastName"].Value = member.LastName;
Response.Cookies["LastName"].Expires = DateTime.Now.AddMonths(2);
Session["UserName"] = txtUserName.Text.Trim();
Session["AccessLevel"] = member.AccessLevel.ToString();
Response.Redirect("~/Default.aspx");
}
else
{
Session["UserName"] = txtUserName.Text.Trim();
Session["AccessLevel"] = member.AccessLevel.ToString();
Session["FirstName"] = member.FirstName;
Session["LastName"] = member.LastName;
Response.Redirect("~/Default.aspx");
}
在我的母版页中,我在page_Load事件中以这种方式为会话分配值:
DisableChaching();
FillInfo();
if (Request.Cookies["UserName"] != null)
{
Session["UserName"] = Request.Cookies["UserName"].Value;
Session["AccessLevel"] = Request.Cookies["AccessLevel"].Value;
Session["FirstName"] = Request.Cookies["FirstName"].Value;
Session["LastName"] = Request.Cookies["LastName"].Value;
WellCome();
if (Session["AccessLevel"].ToString() == "1")
{
RenderMenu(AcccessLevel.SiteManager);
}
else if (Session["AccessLevel"].ToString() == "2")
{
RenderMenu(AcccessLevel.Client);
}
}
else if (Session["UserName"] != null)
{
WellCome();
if (Session["AccessLevel"].ToString() == "1")
{
RenderMenu(AcccessLevel.SiteManager);
}
else if (Session["AccessLevel"].ToString() == "2")
{
RenderMenu(AcccessLevel.Client);
}
}
else
{
WellGo();
RenderMenu(AcccessLevel.LogedOutUser);
}
enter code here
答案 0 :(得分:5)
我想我发现为什么我的会话变为空!当我想在db中保存有关书籍的信息并将书籍的图像文件保存在app文件夹中时,我没有权限保存文件,我的应用程序抛出错误,所有会话都变为空!
答案 1 :(得分:1)
替换下面的代码。
string val = Convert.ToString(Session["AccessLevel"]);
if (val == "2")
{
}
我希望您了解==
和Equals()
public static String AccessLevel {
get
{
return Convert.ToString(HttpContext.Current.Session["AccessLevel"]);
}
set
{
HttpContext.Current.Session["AccessLevel"] = value;
}
}
答案 2 :(得分:0)
为什么我收到此错误?
因为Session["AccessLevel"]
为空并且您正在尝试在Null对象上调用方法。
答案 3 :(得分:0)
对于其他用户,请检查会话超时。可能是问题所在。您可以使用
更改默认超时<system.web>
<authentication mode="Forms">
<forms timeout="50"/>
</authentication>
<sessionState timeout="60" />
</system.web>