【问题标题】:ASP.NET - Strange Bug in Page RedirectionASP.NET - 页面重定向中的奇怪错误
【发布时间】:2013-06-20 14:14:02
【问题描述】:

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

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

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");
}

【问题讨论】:

    标签: asp.net session redirect button


    【解决方案1】:

    如果您在 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...
        }
    }
    

    【讨论】:

      【解决方案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;
              }
          }
      }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-12-20
        • 1970-01-01
        • 2012-09-21
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        • 1970-01-01
        • 2015-02-09
        相关资源
        最近更新 更多