Ich weiß, dass Sie auf der Clientseite (Javascript) windows.location.hash verwenden können, aber ohnehin keinen Zugriff von der Serverseite finden konnten.
Ich weiß, dass Sie auf der Clientseite (Javascript) windows.location.hash verwenden können, aber ohnehin keinen Zugriff von der Serverseite finden konnten.
Antworten:
Wir hatten eine Situation, in der wir den URL-Hash über ASP.Net-Post-Backs hinweg beibehalten mussten. Da der Browser den Hash standardmäßig nicht an den Server sendet, können Sie nur Javascript verwenden:
Wenn das Formular gesendet wird, greifen Sie zu hash ( window.location.hash
) und speichern Sie es in einem serverseitigen versteckten Eingabefeld. Geben Sie dies in ein DIV mit der ID " urlhash
" ein, damit wir es später leicht finden können.
Auf dem Server können Sie diesen Wert verwenden, wenn Sie etwas damit tun müssen. Sie können es sogar ändern, wenn Sie müssen.
Überprüfen Sie beim Laden der Seite auf dem Client den Wert dieses ausgeblendeten Felds. Sie sollten es bei dem DIV finden, in dem es enthalten ist, da die automatisch generierte ID nicht bekannt ist. Ja, Sie könnten hier mit .ClientID einige Tricks machen, aber wir fanden es einfacher, nur den Wrapper DIV zu verwenden, da all dieses Javascript in einer externen Datei leben und generisch verwendet werden kann.
Wenn das ausgeblendete Eingabefeld einen gültigen Wert hat, legen Sie diesen als URL-Hash ( window.location.hash again
) fest und / oder führen Sie andere Aktionen aus.
Wir haben jQuery verwendet, um die Auswahl des Felds usw. zu vereinfachen. Alles in allem handelt es sich um ein paar jQuery-Aufrufe, einen zum Speichern des Werts und einen zum Wiederherstellen des Werts.
Vor dem Absenden:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
Laden auf der Seite:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
kann nach " undefined
" oder anderen Dingen suchen, die Sie nicht behandeln möchten.
Stellen Sie außerdem sicher, dass Sie verwenden $(document).ready()
angemessen verwenden.
RFC 2396 Abschnitt 4.1:
Wenn eine URI-Referenz zum Ausführen einer Abrufaktion für die identifizierte Ressource verwendet wird, besteht die optionale Fragmentkennung, die durch ein Schraffurzeichen ("#") vom URI getrennt ist, aus zusätzlichen Referenzinformationen , die vom Benutzeragenten nach dem Abrufen interpretiert werden Aktion wurde erfolgreich abgeschlossen . Als solches ist es nicht Teil einer URI, sondern wird häufig in Verbindung mit einer URI verwendet.
(Betonung hinzugefügt)
Das liegt daran, dass der Browser diesen Teil nicht an den Server überträgt.
Wahrscheinlich besteht die einzige Möglichkeit darin, es auf der Clientseite zu lesen und manuell auf den Server zu übertragen (GET / POST / AJAX). Grüße Artur
Möglicherweise sehen Sie auch, wie Sie mit der Zurück-Schaltfläche und dem Browserverlauf bei Malcan spielen
Um die Möglichkeit auszuschließen, dass Sie nicht wirklich versuchen, das Fragment auf einem GET / POST zu sehen, und tatsächlich wissen möchten, wie Sie auf den Teil eines URI-Objekts zugreifen können, den Sie in Ihrem serverseitigen Code haben, befindet es sich unter Uri.Fragment ( MSDN-Dokumente ).
Mögliche Lösung für GET-Anfragen:
Neues Link-Format: http://example.com/yourDirectory?hash=video01
Rufen Sie diese Funktion oben am Controller auf oder 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");
}
}