【问题标题】:Redirect to page on button click单击按钮时重定向到页面
【发布时间】:2012-11-29 16:56:30
【问题描述】:

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

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.

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

【问题讨论】:

  • 尝试将其放入 if(!IsPostBack()){}
  • 有点复杂。您必须跟踪有效的推荐人(请参阅下面的答案)。
  • 我刚看到编辑。请尝试我的答案。

标签: c# asp.net


【解决方案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,以便你可以在返回按钮时使用它按下。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • @skyfoot - 同意。此外,Page.IsPostBack 没有任何问题 - 它们都有效。
    【解决方案3】:

    你忘了把它放在IsPostBack 里面是这样工作的

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-09-07
          • 1970-01-01
          • 2021-11-23
          • 2016-09-09
          • 1970-01-01
          • 2021-10-24
          • 1970-01-01
          • 2023-03-08
          • 1970-01-01
          相关资源
          最近更新 更多