0

ASP アプリケーションに戻るボタンを実装する必要があります。

私のWebアプリケーションでは、3つのモジュールを取得しました

  1. task1.aspx -> task1-1.aspx -> task1-2.aspx
  2. task2.aspx-> task2-1.aspx->task3-1.aspx
  3. task3.aspx->task3-1.aspx->task2.1aspx

上記の example.3 モジュールでは、他のページに移動することもできます。だから今、私は問題を抱えています.私が来た前のページに基づいて戻るボタンを実装することは可能ですか. たとえば、私は

task3.aspx -> task3-1.aspx -> task2.1aspx

次に、戻るボタンをクリックすると、

task2.1aspx -> task3-1.aspx -> task3.aspx。

一方、task2.aspx -> task2-1.aspx をクリックすると、

戻るボタンで task2-1.aspx ->task2.apx に移動します

サーバー側で行うことは可能ですか?

4

3 に答える 3

0

次の方法で実行できます。

static string prevPage = String.Empty;

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

 }

 protected void Button1_Click(object sender, EventArgs e)
 {
      Response.Redirect(prevPage);
 }

複数ソースのクロスページ投稿の場合、使用することをお勧めします

<%@ PreviousPageType TypeName

それ以外の

<%@ PreviousPageType VirtualPath
于 2012-09-27T04:34:14.030 に答える
0

これにはStackを使用し、それをSessionに保持します。ページが読み込まれるたびに、現在の URL をスタックにプッシュします。

void Page_Init()
{
    Stack<string> history = Session["history"]; 
    if (history == null) history = new Stack<string>();
    history.Push(Request.Url.AbsoluteUri);
    Session["history"] = history;
}

次に、もちろんクリック ハンドラーで:

void Back_Click()
{
    Stack<string> history = Session["history"]; 
    if (history != null) 
    {
        string url = history.Pop();
        Session["history"] = history;
        Response.Redirect(url);
    }
}
于 2012-09-27T04:37:28.650 に答える
0

私はdbaseman が説明するよりもやや似た方法でそれをやっています。

基本的にBackUrl、クライアントをリダイレクトする各 URL と、ユーザーがクリックする可能性がある各リンクに、クエリ文字列パラメーターを追加します。このBackUrlパラメーターには、現在のページの完全なURL (すべてのパラメーターを含む) が含まれます。

そのため、ユーザーが後続のリダイレクトまたはリンクをクリックするたびに、文字列がどんどん長くなっていきます。URL が長すぎる場合があります。

私の解決策は、実際の URL を格納してBackUrlクエリ文字列パラメーターに戻すのではなく、ハッシュ コードだけを格納することです。サーバー側では、ハッシュ コードと実際の URL を記憶するための文字列辞書 (ユーザーのセッション内) があります。

私のウェブサイトで「戻る」ボタンをクリックすると、この辞書内でルックアップを行い、指定されたハッシュの辞書で見つかった一致する URL にリダイレクトします。

このアプローチの欠点は、ディクショナリが時間の経過とともに大きくなり、決して縮小しないことです。ただし、私の現実世界のすべてのプロジェクトでは、これは決して問題ではありませんでした。さらに、セッションが破棄されると解放されます。

したがって、例は次のようになります。

  • では、ユーザーをではtask1.aspxなく にリダイレクトします。task1-1.aspxtask1-1.aspx?BackUrl=24378
  • サーバー側の辞書エントリを保存し、 にマッピング24378task1-1.aspxます。
  • では、ユーザーをではtask1-1.aspx?BackUrl=24378なく にリダイレクトします。task1-2.aspxtask1-2.aspx?BackUrl=93748
  • サーバー側の辞書エントリを保存し、 にマッピング93748task1-1.aspx?BackUrl=24378ます。

次に、ページに戻るボタンを配置できます。

  • ユーザーがその戻るボタンをクリックすると、void BackButton_Click関数が呼び出されます。
  • その関数ではRequest["BackUrl"]、ハッシュ コードを取得するために使用します (例: 24378)。
  • ハッシュ コードを使用して辞書を調べ、実際の URL を取得します。
  • Response.RedirectそのURLに。

それが基本的な考え方です。

擬似コード:

より明確にするためのいくつかの擬似コード。

Page辞書の場合、次のように、派生基本クラス内にヘルパー プロパティを記述します。

protected Dictionary<string, string> BackUrls
{
    get
    {
        var dic = Session["backdic"] as Dictionary<string, string>;
        if ( dic == null )
        {
            dic = new Dictionary<string, string>();
        }
        return dic;
    }
}

その後、ディクショナリに書き込みまたは読み取りを行うことで、ディクショナリにアクセスできます。

例: 辞書への書き込み:

private void goForwardToNextTask()
{
    var hash = Math.Abs(Guid.NewGuid().GetHashCode());

    // Store current page's full URL.
    BackUrls[hash] = Request.RawUrl;

    Response.Redirect( "task1-2.aspx?BackUrl=" + hash );
}

そして辞書から読む:

private void goBackward()
{
    var hash = Request["BackUrl"];

    // Backward translation.
    Response.Redirect( BackUrls[hash] );
}

(すべての例では、エラーとサニティ チェックが省略されています)。

于 2012-09-27T04:46:05.693 に答える