0

嗨,我正在尝试在单击按钮时重定向到上一页,但事情进展不顺利,这是我的代码:

private string previousPage = string.Empty;


protected void Page_Load(object sender, EventArgs e)
{
    if( Request.UrlReferrer != null)
    {
        previousPage = Request.UrlReferrer.ToString();
        CrossSideScriptingErrorCheck.Text = previousPage;
    }  
}
protected void BackButton_Click( object sender , EventArgs e )
{      
   Response.Redirect(previousPage);
}

当我第一次被定向到这个页面时,previousPage 变量存储了正确的 URL,但是在我单击按钮后,由于某种原因,previousPage 值更改为当前页面 url,我被发送回当前页面。

我在这里做错了什么,我该如何纠正它?

编辑

我包装了这样的代码:

if(!IsPostBack)
   {
       if( Request.UrlReferrer != null ) {
           previousPage = Request.UrlReferrer.ToString();
           CrossSideScriptingErrorCheck.Text = previousPage;
       }   
   }

我被重定向到一个我没有创建并有一个链接的页面。页面上写着:

Object moved to here.

“这里”是一个链接,当我点击它时,我会返回到我按下按钮的页面

4

5 回答 5

1

您需要测试回发。当您单击该按钮时,页面将被发送回服务器,并且引用者将成为您所在的页面,并且您想要的值将被覆盖。

 private string previousPage = string.Empty;


protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        if( Request.UrlReferrer != null)
        {
            previousPage = Request.UrlReferrer.ToString();
            CrossSideScriptingErrorCheck.Text = previousPage;
        }
    }  
}
protected void BackButton_Click( object sender , EventArgs e )
{      
   Response.Redirect(previousPage);
}
于 2012-11-29T16:59:00.030 回答
1

当您有回发时,引用者就是页面本身,所以这是预期的行为:-)

一种解决方案是有这样的东西:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack) Session["prev"] = Request.UrlReferrer.ToString();
    if(Session["prev"] == null) {some code that disables the back button goes here!}
}
protected void BackButton_Click( object sender , EventArgs e )
{      
   Response.Redirect(Session["prev"] as string);
}

这个答案有效而到目前为止发布的其他答案无效的原因是我正在使用 Session["prev"] 来记住最近的有效推荐人。所以诀窍是1)意识到当你有一个回发时,引用者是页面本身的url(OP做了)和2)记住最后一个非发布引用者URL,以便你可以在返回按钮时使用它按下。

于 2012-11-29T16:59:11.953 回答
0

你忘了把它放进去IsPostBack,它的工作方式是这样的

if(!IsPostBack)
{
   if( Request.UrlReferrer != null)
    {
        previousPage = Request.UrlReferrer.ToString();
        CrossSideScriptingErrorCheck.Text = previousPage;
    }
}

像这样的代码可以使用它...

于 2012-11-29T16:59:18.657 回答
0

当您单击按钮时,页面加载在单击事件之前执行,因此它正在重置您的 previousPage 变量的值。您需要将其包裹在支票中以确保它没有被寄回,如下所示:

if (!IsPostBack) {
    previousPage = Request.UrlReferrer.ToString();
}
于 2012-11-29T16:59:59.287 回答
0

我是最后一个回答但最先发表评论的人

protected void Page_Load(object sender, EventArgs e)
{
 if(!IsPostBack)
 {   
  if( Request.UrlReferrer != null)
    {
        previousPage = Request.UrlReferrer.ToString();
        CrossSideScriptingErrorCheck.Text = previousPage;
    }  
  }
}
于 2012-11-29T17:03:33.077 回答