クライアント側(javascript)ではwindows.location.hashを使用できますが、サーバー側からアクセスする方法が見つかりませんでした。
クライアント側(javascript)ではwindows.location.hashを使用できますが、サーバー側からアクセスする方法が見つかりませんでした。
回答:
ASP.Netポストバック全体でURLハッシュを永続化する必要がある状況がありました。ブラウザーはデフォルトでハッシュをサーバーに送信しないため、それを行う唯一の方法はいくつかのJavaScriptを使用することです。
フォームが送信されたら、ハッシュ(window.location.hash
)を取得してサーバー側の非表示の入力フィールドに保存しますurlhash
。これを「」のIDでDIVに配置すると、後で簡単に見つけることができます。
サーバーで何かをする必要がある場合は、この値を使用できます。必要に応じて変更することもできます。
クライアントでのページの読み込み時に、このこの非表示フィールドの値を確認します。自動生成されたIDは認識されないため、含まれているDIVで検索する必要があります。はい、ここで.ClientIDを使用していくつかのトリックを実行できますが、ラッパーDIVを使用する方が簡単です。このDIVを使用すると、このすべてのJavascriptを外部ファイルで実行し、一般的な方法で使用できます。
非表示の入力フィールドに有効な値がある場合は、それをURLハッシュ(window.location.hash again
)として設定するか、他のアクションを実行します。
フィールドの選択などを単純化するために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()
もちろん適切に使用してください。
RFC 2396セクション4.1:
URI参照を使用して識別されたリソースで検索アクションを実行する場合、オプションのフラグメント識別子は、ハッチング(「#」)文字でURIから分離され、検索後にユーザーエージェントによって解釈される追加の参照情報で構成されますアクションは正常に完了しました。そのため、URIの一部ではありませんが、URIと組み合わせて使用されることがよくあります。
(強調を追加)
これは、ブラウザがその部分をサーバーに送信しないためです。
実際にGET / POSTでフラグメントを表示しようとしているのではなく、サーバー側コード内にあるURIオブジェクトのその部分にアクセスする方法を知りたいという可能性を排除するために、それはUri.Fragmentの下にあります(MSDNドキュメント)。
GETリクエストの可能な解決策:
新しいリンク形式: http://example.com/yourDirectory?hash=video01
コントローラの上部に向かってこの関数を呼び出すか、またはhttp://example.com/yourDirectory/index.php
:
function redirect()
{
if (!empty($_GET['hash'])) {
/** Sanitize & Validate $_GET['hash']
If valid return string
If invalid: return empty or false
******************************************************/
$validHash = sanitizeAndValidateHashFunction($_GET['hash']);
if (!empty($validHash)) {
$url = './#' . $validHash;
} else {
$url = '/your404page.php';
}
header("Location: $url");
}
}