1. ホーム
  2. url

[解決済み] サーバーサイドからUrl Hash (#) を取得する方法

2022-06-06 23:51:15

質問

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

どのように解決するのですか?

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

  1. フォームが送信されたときに、ハッシュを取得します ( window.location.hash ) を取得し、サーバーサイドの隠し入力フィールドに保存します。 これを " という ID の DIV に置きます。 urlhash というIDのDIVに入れます。

  2. サーバー上で を使用する必要がある場合、この値を使用することができます。必要であれば変更することもできます。

  3. ページロード時 クライアント上で で、この隠しフィールドの値をチェックする。自動生成されたIDが分からないので、それが含まれているDIVによってそれを見つけたいと思うでしょう。 はい、あなたはここで.ClientIDでいくつかのトリックを行うことができますが、私たちはラッパーDIVを使用する方が簡単であることを発見した、それはこのすべてのJavascriptが外部ファイルに住み、汎用的に使用されることを可能にするからです。

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

フィールドの選択などを簡略化するためにjQueryを使用しました...結局、いくつかのjQueryの呼び出し、値を保存するための1つ、それを復元するための1つとなっています。

送信前。

$("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() を適切に使うことももちろん必要です。