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

ポストバックがある場合、リファラーはページ自体であるため、これは予想される動作です:-)

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 に答える