4

多数のWebフォームを持つ古いアプリケーションがあります。すべてaspxのページには、ユーザーを前のページに移動させる指定の戻るボタンがあります。すべてのボタンで、javascriptonclickイベントがに設定されていhistory.back()ます。

あるaspxページでは、戻るボタンがまったく機能しませんでした。同じことを実現するサーバー側のボタンを使用することにしました。ボタンのonclickイベントには、ユーザーを前のページに移動するために必要なコードが含まれています。

最初に次の方法でonclickイベントを作成しましたが、戻るボタンがまったく機能しませんでした。デバッグモードに入ると、prevPage変数が前のページのURLではなく現在のページのURLを保持していることがわかりました。

private void btnBack_Click(object sender, System.EventArgs e)
{
    string prevPage = Request.UrlReferrer.ToString();
    Response.Redirect(prevPage);
}

次に、prevPageを静的変数に変更し、その値をif(!IsPostBack)ブロック内に設定するように定義しました。これで、戻るボタンが正しく機能しました。

static string prevPage = string.Empty;
private void Page_Load(object sender, System.EventArgs e)
{
    if(!IsPostBack)
    {
        prevPage = Request.UrlReferrer.ToString();
    }
}

private void btnBack_Click()
{
    Response.Redirect(prevPage);
}

最初の試みがうまくいかない理由と、2回目の試みがうまくいかない理由がわかりませんでした。

history.back()この特定のページで、またはが機能しない何かが起こっている場合、これが説明になるかもしれないと私は感じていますhistory.go(-1)

これについての洞察を提供していただけますか?

編集:私はIE8を使用しています。

4

3 に答える 3

4

ボタンをクリックするとポストバックがすでに発生しているため、最初の試行は機能しません。したがって、リファラーURLはボタン(現在のページ)からのものです。

私の意見では、ページをレベルに戻すようにサーバーにリクエストを送信することはありません。クライアント側でより迅速に実行できる場合は、不要なリクエストです。

于 2012-08-17T10:19:33.367 に答える
3

男、以前のURLを保存するために静的変数を使用しないでください。これはすべてのセッションで共有され、ページがさまざまな場所から取得できる場合、ユーザーは混乱します。あなたが最後のページを追跡したいなら、Sessionあなたの親友です。

于 2012-08-17T10:35:29.690 に答える
1
JavaScript:window.history.go(-2);return false;

必要なのはそれだけです。onclientclickまたは単にアンカータグに入れてください。最初のクリックで送信の確認ページに移動するため、2回クリックする必要があります。

于 2014-10-28T13:55:29.760 に答える