138

クライアント側(javascript)でwindows.location.hashを使用できることは知っていますが、サーバー側からアクセスする方法が見つかりませんでした。私はasp.netを使用しています。

4

6 に答える 6

137

ASP.Net ポストバック全体で URL ハッシュを永続化する必要がある状況がありました。ブラウザはデフォルトでハッシュをサーバーに送信しないため、これを行う唯一の方法は Javascript を使用することです。

  1. フォームが送信されたら、ハッシュ ( ) を取得し、サーバー側の非表示の入力フィールドに保存します。後で簡単に見つけられるようにwindow.location.hash、ID が " " の DIV にこれを入れます。urlhash

  2. サーバー上で何かを行う必要がある場合は、この値を使用できます。必要に応じて変更することもできます。

  3. クライアントでのページ読み込み時に、この隠しフィールドの値を確認してください。自動生成された ID がわからないため、含まれている DIV で検索する必要があります。はい、ここで .ClientID を使用してトリックを実行できますが、ラッパー DIV を使用する方が簡単であることがわかりました。これにより、このすべての Javascript を外部ファイルに配置し、一般的な方法で使用できるようになります。

  4. 非表示の入力フィールドに有効な値がある場合は、それを URL ハッシュ ( window.location.hash again) として設定するか、他のアクションを実行します。

jQuery を使用してフィールドの選択などを簡素化しました。全体として、値を保存するための jQuery 呼び出しと、値を復元するための jQuery 呼び出しがいくつか発生します。

送信する前に:

$("form").submit(function() {
  $("input", "#urlhash").val(window.location.hash);
});

ページの読み込み時:

var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
  window.location.hash = hashVal;
}

IsHashValid()undefined" " またはその他の処理したくないものをチェックできます。

また、$(document).ready()もちろん適切に使用するようにしてください。

于 2009-10-18T23:14:26.537 に答える
85

[RFC 2396][1] セクション 4.1:

識別されたリソースに対して検索アクションを実行するために URI 参照が使用される場合、クロスハッチ (「#」) 文字によって URI から分離されたオプションのフラグメント識別子は、検索後にユーザー エージェントによって解釈される追加の参照情報で構成されます。アクションは正常に完了しました。そのため、これは URI の一部ではありませんが、しばしば URI と組み合わせて使用​​されます。

(強調追加) [1]: https://www.rfc-editor.org/rfc/rfc2396#section-4

于 2008-11-25T19:27:15.703 に答える
42

これは、ブラウザがその部分をサーバーに送信しないためです。申し訳ありません。

于 2008-11-25T15:45:55.370 に答える
7

おそらく唯一の選択肢は、クライアント側でそれを読み取り、手動でサーバーに転送することです (GET/POST/AJAX)。よろしくアルトゥール

Malcanで戻るボタンとブラウザの履歴で再生する方法も表示される場合があります

于 2008-12-30T11:16:13.100 に答える
3

GET / POSTでフラグメントを実際に表示しようとしておらず、サーバー側のコード内にあるURIオブジェクトのその部分にアクセスする方法を実際に知りたいという可能性を排除するために、Uri.Fragmentの下にあります。 (MSDNドキュメント)。

于 2008-12-30T15:13:20.563 に答える