2017-04-10 25 views
1

私は、asp.netベースのWebサイトでいくつかの動作を診断しようとしています。ASP.Net Response.Redirect戻るボタンをエミュレートする

ユーザーはpage1上にあり、GridViewにデータとページ2にリダイレクトするハイパーリンクを設定するクエリを実行します。

ユーザーがハイパーリンクをクリックし、データを編集できるページ2にリダイレクトされます。ページ2の一番下には、ユーザーをページ1に戻すキャンセルボタンがあります。

[キャンセル]ボタンをクリックすると、検索結果が表示された状態でpage1に戻ります。これは、ブラウザの[戻る]ボタンをクリックしても、response.redirectでこの動作をエミュレートできない場合に機能します。

私は、次の組み合わせの数試してみた:

reponse.redirect(request.url.tostring())

を、すべてのインスタンスが

をPage1のページ2を参照しないように思えます

ご意見はありますか?

答えて

1

これは、使用している.netのバージョンによって異なります。 .Net Coreでは、リクエストのヘッダーに必要な情報があります。

Request.Headers["Referer"] 

これは、完全なURLとクエリ文字列を持っています。コントローラーでこれを捕捉し、ビュー・モデルの値に設定することができます(またはビュー・バッグに入れる)。

if (Request.Headers.Keys.Contains("Referer")) 
    ViewBag.Referer = HttpContext.Request.Headers["Referer"]; 
else 
    ViewBag.Referer = ""; 

次に、ビュー内でstring.IsNullOrEmpty(ViewBag.Referer)を使用してください。私は安全上の理由からチェックを追加しました。なぜなら、彼らがリンクなしでページに直接アクセスしたのはなぜですか?

Request.Headers.TryGetValueも使用できます。ヘッダーが重複する可能性があるため、少し安全ですが、ここでは絶対にはありません。

+0

こんにちは、応答のおかげで、それはまだ動作していない、私は何が起こっているかを明らかにする。私はいくつかのブレークポイントを追加し、少し拡張することができます。 page2では、Page_Loadイベントにブレークポイントを設定しました。私がrequest.headers( "Referer")を出力すると、page1を正しく参照しています。 ページ2では、ユーザーをページ1に戻す必要がある「戻る」ボタンがありますが、「戻る」ボタンをクリックするとpage_loadイベントが発生し、request.headers( "referer")がpage2を指しています。したがって、私はページ1の元のクエリに戻ることはできません – kevin

+0

"戻る"ボタンのコードを投稿してください。あなたがしなければならないことは、あなたのボタンであるアンカータグのhrefにViewBagに保存した値を送信することです(上で示したように)。私の推測では、あなたのボタンは「提出」であり、フォームを提出しようとしています。 – nurdyguy

+0

私が "戻る"ボタンイベントでやっていることは、あなたが提案したようにresponse.redirectを呼び出し、それに保存された値を渡すことです。さらに調査した後、ボタンがポストバックを引き起こしているかどうかを判断する必要があると思います。リファラを割り当てないでください。 – kevin

関連する問題