140 votes

Comment obtenir le hachage de l’Url (#) du côté serveur

Je sais que côté client (javascript) vous pouvez utiliser windows.location.hash mais ne pourriez quand même trouver d’accès du côté serveur.

139voto

Chris Points 816

Nous avons eu une situation où nous avons besoin de conserver l'URL de hachage à travers ASP.Net post le dos. Tant que le navigateur n'envoie pas le hachage du serveur par défaut, la seule façon de le faire est d'utiliser du Javascript:

  1. Lorsque le formulaire soumet, saisir la valeur de hachage (fenêtre.emplacement.de hachage) et de le stocker dans un serveur-côté caché champ de saisie de Mettre cela dans une DIV avec un id de "urlhash" afin que nous puissions le retrouver facilement plus tard.

  2. Sur le serveur vous pouvez utiliser cette valeur si vous avez besoin de faire quelque chose avec elle. Vous pouvez même modifier si vous en avez besoin.

  3. Sur la page de la charge sur le client, vérifier la valeur de ce champ caché. Vous voulez trouver par la DIV elle est contenue dans le auto-ID généré ne sera pas connu. Oui, vous pourriez faire quelques astuces ici .ClientID, mais nous avons trouvé qu'il est plus simple d'utiliser le wrapper DIV car il permet à tous ce Javascript pour vivre dans un fichier externe et être utilisé dans le générique de la mode.

  4. Si le champ caché a une valeur valide, le définir comme le hachage de l'URL (fenêtre.locaion.hachage de nouveau) et/ou effectuer d'autres actions.

Nous avons utilisé jQuery pour simplifier la sélection du champ, etc... dans l'ensemble, il finit par être un peu de jQuery, les appels, l'un pour enregistrer la valeur, et un autre pour le restaurer.

Avant de soumettre:

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

Au chargement de la page:

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

IsHashValid() peut vérifier "undefined" ou d'autres choses que vous ne voulez pas gérer.

Aussi, assurez-vous d'utiliser $(document).prêt() de manière appropriée, bien sûr.

85voto

Mauricio Scheffer Points 70470

La RFC 2396 section 4.1:

Lorsqu'une référence URI est utilisé pour effectuer une récupération d'action sur la ressources identifiés, avec en option un identificateur de fragment, séparé de l'URI par un hachurage ( " # " ), se compose d'supplémentaire informations de référence pour être interprété par l'agent de l'utilisateur après l' la récupération d'action a été complété avec succès. En tant que tel, il n'est pas une partie de l'URI, mais est souvent utilisé en conjonction avec un URI.

(emphase ajoutée)

42voto

Julien Oster Points 1506

C’est parce que le navigateur ne transmet cette partie sur le serveur, Désolé.

3voto

patridge Points 12264

Juste pour éliminer la possibilité que vous n’êtes pas effectivement essayer de voir le fragment sur un GET/POST et je veux réellement savoir comment pour accéder à cette partie d’un objet URI, que vous avez votre code côté serveur, il est sous Uri.Fragment (docs MSDN).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X