2

ほとんどの Web サイトには、常に「前に戻る」ボタンがあります。通常は実装されているのではないかと思います。

基本的に、ページの深さが 5 レベルを超えるサイトを構築しています。例として、ページ レベルは次のようになります。

詳細検索 => 検索結果 => 検索内容 => 求人に応募 => 求人情報を保存

ユーザーが前のレベルに戻ることができるようにする必要があるため、「検索の詳細」からクリックして戻ることができ、以前のすべての検索条件が保持された「検索結果」ページに戻ることができます。

私は現在、クエリ文字列パラメーターの一部として「バック URL」を保存しており、ユーザーが深く掘り下げたときに URL を追加しています。これに関する問題は、ユーザーが 3 つ以上のレベルに飛び込むと、URL が非常に長くなり、乱雑になることです。

この種の問題に対処するためのasp.net MVCアプリのベストプラクティスは何ですか?

4

4 に答える 4

2

I am currently storing the "back url" as part of the query string paramter and append the url as user dives in deeper. The issue with this is that when as user dives in more than 3 levels, the url get really long and messy.

URLではなく、セッションに保存してください。必要なものすべてをカプセル化するクラスを簡単に作成して(それが理にかなっている場合)、セッションに貼り付けるだけです。最後のページのURLを保存した後だけの場合は、セッションに文字列を保存するだけです。

Session["lastPage"] = "~/mypage.aspx";

すべてをURLに追加するよりも、はるかにクリーンです(そしていくらか安全です)。ここでは、JavaScriptを使用することは適切なオプションではありません。

于 2012-08-20T08:29:29.487 に答える
1

私が使用した古いWeb開発プラットフォーム(数年前)では、これは組み込み関数を使用して解決されました。アイデアは、サーバーがURLのある種の内部コレクションを維持し、それらを単純な数値にマップするというものでした。コレクションに新しいURLを追加すると、サーバーは最初にその正確なURLがすでに存在するかどうかを確認し、存在する場合は関連する番号を返します。追加したURLが新しい場合は、それが追加され、新しい番号が返されます。

説明のためのいくつかのサンプル...ユーザーがページから始めたと仮定しましょう:

http://foo.bar.com/search/

このページを「ページ1」と呼びます。検索する条件を追加すると、次のページに結果が表示されます。

http://foo.bar.com/search/results?jobTitle=CEO&etc&etc

これを「ページ2」と呼びます。このページで、ユーザーはクリックして特定の結果を開き、次のページに移動できます。

http://foo.bar.com/search/results/12313

それを「ページ3」と呼びます。

2ページと3ページの「前に戻る」機能を使用するには、1つの追加のクエリパラメータを使用して開く必要があります。ページ1がページ2のURLを生成しているとき、サーバーはユーティリティメソッドをSaveUrl()(適切なクラスで)呼び出し、結果をクエリ文字列に追加して、ページ2のURLが次のようになるようにします。

http://foo.bar.com/search/results?jobTitle=CEO&etc&etc&return_url=1

新しいreturn_url=1クエリパラメータに注目してください。次に、ページ2は、対応するGetReturnUrl(1)メソッドを使用して、「前に戻る」リンクで使用するURLをフェッチします。この呼び出しにより、以前に追加されたURLが返されますhttp://foo.bar.com/search/

2ページから3ページに進むには、同じを使用して新しいクエリ文字列パラメータを追加する必要もありますSaveUrl()。3ページ目の新しいURLは次のようになります。

http://foo.bar.com/search/results/12313?return_url=2

3ページ目では、「前に戻る」ページのURLはGetReturnUrl(2)、を使用してフェッチされます。これにより、が返されhttp://foo.bar.com/search/results?jobTitle=CEO&etc&etc&return_url=1ます。

したがって、このシステムは、現在のページのURLを保存し、そのURLを次のページに提供することで機能します。また、現在のページのURLには、クエリパラメータの形式で現在のページの前のページへの参照が含まれているため、前のトレイルに戻ることが維持されます。

以前のトレイルに戻るのに賢い方法だと思うので、これを説明しようと思いました。ただし、これが業界標準またはベストプラクティスであるとは主張していません...

編集:このアプローチに関するいくつかの考えと考慮事項。

長所:

  • これまでにない長いクエリ文字列を発生させることなく、URLを保存および取得する簡単な方法

短所:

  • URLに戻るために必要なすべての状態が含まれている限り機能します。
  • 実装の詳細(グローバルURLコレクション?セッションでのユーザー固有のURLコレクション?SQLサーバーで永続化?)によっては、Webファームで問題が発生する可能性があります(すべてのサーバーは、どのURLが「1」として保存されるかについて合意する必要があります)。
  • トラフィックの多いサイトでメモリの問題が発生する可能性があります(ただし、特定の実装によっても異なります)
于 2012-08-20T08:32:36.897 に答える
1

この古い JavaScript メソッドを試してください

<a href="javascript:history.go(-1)">Go Back</a>

また

<input type="button" value="Go Back" onclick="history.go(-1)" />

これは、すべてのシナリオで動作することが保証されていない各ページにある必要があります

于 2012-08-20T07:35:57.690 に答える
1

ユーザーが新しいページや新しいタブを開いたり、同じページに投稿したりした場合など、多くの問題があるため、ブラウザで処理するために戻るボタンを残し、サイトに (再度) 追加しないでください。他のサイトから来た場合、バックはあなたの思うようにはなりません。

追加できるのは、ライン メニューやツリー メニュー、および最初からわかっている次/前のページです。

于 2012-08-20T07:41:06.260 に答える