0

我正在编写一个用户可以登录其帐户的网站。

登录帐户后,用户可以更改他的秘密问题或答案。为此,他必须遍历三个页面:

1)第一页要求用户输入密码,即使他已经登录。如果接受给定的密码,则会创建一个名为Edit_Secret_1的会话,内容为Success 。

2) 当第二个页面加载时,它会检查 Session Edit_Secret_1的内容。如果它们为空,意味着用户通过地址栏导航到该页面,他将被重定向到 AccountManagement 页面。否则,会话Edit_Secret_1设置为空。这是为了防止用户在会话中更改一次秘密问题/答案后通过地址栏再次访问该页面。

3) 第三页显示一个简单的确认信息。我还没做。

这是第二页的截图:

在此处输入图像描述

现在秘密问题和秘密答案字段是空的,因为我没有对从数据库中检索数据的部分进行编码。

为了测试这些按钮,我编写了Save Changes按钮以重定向到 HomePage.aspx,而Cancel按钮应该重定向到 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");
}
4

2 回答 2

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...
    }
}
于 2013-06-20T14:18:51.687 回答
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;
        }
    }
}
}
于 2013-06-20T14:23:16.857 回答