Response.Redirect et Ancrage [Résolu]

Signaler
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
-
billou_13
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
-
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
---------------------

1 réponse

Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
16
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
---------------------