我正在编写一个用户可以登录其帐户的网站。
登录帐户后,用户可以更改其秘密问题或答案。为此,他必须遍历三页:
1)第一页询问用户密码,即使他已经登录。如果接受了密码,则会创建一个名为 Edit_Secret_1 的会话,内容为成功。
2)加载第二页时,会检查会话 Edit_Secret_1 的内容。如果它们为null,表示用户通过地址栏导航到页面,则会将其重定向到AccountManagement页面。否则,会话 Edit_Secret_1 将设置为null。这是为了防止用户在会话中更改一次机密问题/答案后再次通过地址栏访问该页面。
3)第三页显示一条简单的确认消息。我还没有这样做。
这是第二页的屏幕截图:
现在秘密问题和秘密答案字段是空的,因为我没有编码从数据库中检索数据的部分。
为了测试按钮,我将保存更改按钮编码为重定向到HomePage.aspx,而取消按钮应重定向到ContactUs.aspx。现在,当我单击两个按钮中的任何一个时,我将被重定向到AccountManagement.aspx。我知道问题与将Session设置为null有关,但我不知道如何解决它。有人可以帮忙吗?
以下是代码:
protected void Page_Load(object sender, EventArgs e)
{
Label_Error.Visible = false;
if (Session["Username"] == null)
{
Response.Redirect("HomePage.aspx");
}
else
{
if (Session["Edit_Secret_1"] == null)
{
Response.Redirect("AccountManagement.aspx");
}
else
{
Session["Edit_Secret_1"] = null;
}
}
}
protected void Cancel_Click(object sender, EventArgs e)
{
Response.Redirect("ContactUs.aspx");
}
protected void Button_SaveChanges_Click(object sender, EventArgs e)
{
Response.Redirect("HomePage.aspx");
}
答案 0 :(得分:2)
如果你在Page_Load,Cancel_Click和Button_SaveChanges_Click方法和调试中放置了断点,我相信你会发现你的Page_Load正在触发并导致重定向,因为该方法中的代码。
您可能需要添加一项检查以确定它不是回发 - 如下所示:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//current Page_Load code in here...
}
}
答案 1 :(得分:2)
尝试将isPostBack放在page_load方法
上protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Label_Error.Visible = false;
if (Session["Username"] == null)
{
Response.Redirect("HomePage.aspx");
}
else
{
if (Session["Edit_Secret_1"] == null)
{
Response.Redirect("AccountManagement.aspx");
}
else
{
Session["Edit_Secret_1"] = null;
}
}
}
}