Response.Redirect et Ancrage [Résolu]

billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 27 mai 2009 à 12:29 - Dernière réponse : billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention
- 3 juin 2009 à 14:04
Bonjour,

Alors voila, je vous expose mon problème. Mon site asp.net est "AJAXisé" (permettez moi l'expression).
Afin de conserver une URL dynamique lors des différents chargements, j'ai joué avec l'ancrage.
Ie: ma page "Default.aspx#page= 1" affiche dynamique la page 1
Un clic sur la page 2 (lien href="Default.aspx#page=2) affiche dynamiquement la page 2
etc...

Jusque là, tout va bien.

Mais j'ai un problème aujourd'hui lorsque la personne demande directement la page "Default.aspx#page=2" sans s'être connectée au préalable (j'ai un système d'authentification .net).
Le système d'authentification Asp.Net redirige bien l'utilisateur vers la page: "Login.aspx?ReturnUrl=Default.aspx#page=2"

Et là, c'est le drame...

Lorsque l'utilisateur s'authentifie, il est redirigé vers "ReturnUrl" qui est égal à " Default.aspx " et non "Default.aspx#page =2".
Pourquoi ? parce que l'ancrage n'est pas "posté" au serveur. Donc le serveur ne sait pas quel est la vrai adresse de redirection.

J'ai donc plusieurs solutions à ce problème mais je ne sais pas techniquement comment le faire (à part une que je trouve compliqué):
1) J'arrive à faire un Response.Redirect(...) qui ne me supprime pas l'ancrage.
Car, après tout, comment cela se fait que le ReturnUrl est bon lorsque Asp.net redirige l'utilisateur vers Login.aspx ??? Il doit bien lui faire un genre de Response.Redirect(...) en lui disant de conserver l'ancrage ??? J'en sais rien.

2) J'arrive à me brancher au niveau de l'appel à "Default.aspx#page=2" et à changer temporairement l'adresse par un encodage maison ^^ (ie remplacement de # par $ ou autre)

3) Je fais un block javascript (startup) au lieu de faire un response.redirect qui prend en compte l'url avec l'ancrage et redirige automatiquement l'utilisateur.

J'aimerais beaucoup faire la solution 1 mais je ne sais pas comment. Je m'en remet à vous !
Je n'aime pas la solution 2.
Je sais faire la solution 3 mais je n'aime pas trop.

Merci à vous et bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 3 juin 2009 à 14:04
3
Merci
Bonjour à tous,

Alors, j'ai mis en place une nouvelle solution pour répondre à mon besoin et cela fonctionne parfaitement.
L'idée: je place un champ caché dans la page de login qui verra sa valeur initialisée par l'ancrage de ma page.

L'implémentation:
Code aspx:

Code behind (cs):
protected void Page_PreRender(object sender, EventArgs e)
{
   //Enregistrement du javascript qui exécuté côté client, remplit automatique la valeur du contrôle "hdnHash"   string javaScript string.Format("document.getElementById('{0}').value window.location.hash;", hdnHash.ClientID);
   Page.ClientScript.RegisterStartupScript(this.GetType(), "LoginControlScript", javaScript, true);
}

//Récupération de la page pour redirection après authentification ok
private string GetRedirectUrl()
{
   string returnUrl = Request["ReturnUrl"];

   if (string.IsNullOrEmpty(returnUrl))
   {
      return FormsAuthentication.DefaultUrl;
   }
   else
   {
      return string.Concat(returnUrl, hdnHash.Value);
   }
}

//Et redirection...
Response.Redirect(GetRedirectUrl(), false);

Tout simple,

Voila,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------

Merci billou_13 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 128 internautes ce mois-ci

Commenter la réponse de billou_13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.