billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
27 mai 2009 à 12:29
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
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
---------------------
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 3 juin 2009 à 14:04
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"];
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------