IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

PB Transfert & Redirect


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    CUCARACHA
    Invité(e)
    Par défaut PB Transfert & Redirect
    Salut,

    J'ai un problème du style serpent qui se mord la queue entre Transfert et Redirect.

    Soit un site applicatif de base (ASP.net 3.5) utilisant l'identification ASP.net, un asp:menu, un web.SiteMap et un asp:SiteMapPath.

    Je travaille sur une extension de la gestion des utilisateurs.

    Pour se faire, j'ai créé un Repeater qui contient des boutons

    Lorsque je suis sur la liste des utilisateurs mon asp:SiteMapPath indique :

    SA : Liste des utilisateurs
    Mon Url est ~/SA/Utilisateurs.aspx

    C'est correct.

    Lorsque je clique sur un des boutons du repeater, je veux aller dans la fiche détail de l'utilisateur correspondant à la ligne cliquée.

    Je n'ai pas opté pour un changement côté client de la propriété action du formulaire pour éviter les problème de sécurité.

    J'ai donc deux options :

    Response.Redirect
    Server.Transfert

    Lorsque j'utilise la première option, mon asp:SiteMapPath indique :

    SA : Liste des utilisateurs : Détail utilisateur
    Mon URL est ~/SA/Utilisateur/Coord.aspx

    C'est correct, problème je n'arrive pas (et c'est normal) à accéder au contexte de la page précédente puisqu'elle est déchargée.

    Si en revanche, j'utilise le Server.Transfert mon URL ne change pas, mon
    asp:SiteMapPath n'est donc pas remis à jour mais j'accède bien au contexte de ma page précédente avec PreviousPage (ce qui est pratique).

    Mon objectif serait de ménager la chèvre et le chou, en d'autres termes :

    Soit utiliser un Server.Transfer en forcant le changement d'url
    Soit utiliser le Response.Redirect pour pouvoir récupérer le contenu de 2 variables sur l'autre page.

    Bien entendu, il est exclu de passer les valeurs en Get dans l'adresse sinon ou serait le sport.

    Est-il possible de déclencher un submit côté serveur plutôt qu'un redirect ?
    Avez-vous des idées pour régler mon problème ?

    D'avance merci

    Laurent

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    variables de sessions?

    faudrait voir ce que tu appelles "contexte". si c'est juste l'id de l'utilisateur, c'est là l'intérêt des paramètres GET, ils n'ont pas été inventés pour rien
    Si après, tu parles de sport, tu peux aussi t'amuser à crypter la chaine de paramètre de l'url (Request.Query il me semble) et la décrypter sur la seconde page.

    de toute façon c'est simple. si un objet est censé être présent sur plusieurs pages alors c'est les variables de sessions. si ce n'est que des informations temporaires et sécurisées (dans le sens non sensitives) alors GET est la solution. ca force deux choses mais qui de toutes facon sont à faire à dans toute application securisé:
    -1- avoir des id uniques en base et si possibles "anonymes", un guid fait très bien l'affaire
    -2- crypter l'url ou alors checker sur la page recevant le GET les droits de l'utilisateur. il pourrait saisir l'id d'un utilisateur (ou ce que tu veux) pour lequel il n'aurait pas les droits de visu

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut Surtout pas de session !
    Salut,

    Merci pour ton intervention. Je ne veux surtout pas utiliser de variable de session. J'essaye, dans la mesure du possible, de ne pas les activer dans IIS (mais c'est pas toujours évident).

    J'ai trouvé une solution avec le CrossPostBack ça marche nickel.

    En fait en renseignant onCommand ET PostBackURL on constate que l'evenement onCommand se produit sur la page locale AVANT le submit. C'est exactement ce qui me fallait.

    Je récupère mes billes dans la page cible avec Page.PreviousPage et un petit RecursiveFindControl

    3 heures de perdues Mais 10jours de gagné car j'ai enfin pu combiner la gestion des utilisateurs et la navigation ce qui n'est pas sans simplifier mon appli.

    NextStep Gestion des Rôles via WebService WCF mais la ça se complique car je n'ai rien trouvé qui permette de croiser ces deux technologies.

    Merci

    ++

    Laurent

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut Appli médical
    Oui j'utilise des clefs Guid partout...

    ++

    Laurent

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    tu pourrais expliquer un peu plus ton crosspostback s'il te plait
    je comprend pas trop le
    se produit sur la page locale AVANT le submit

  6. #6
    CUCARACHA
    Invité(e)
    Par défaut Pages master imbriquées
    Au passage, les pages master imbriquées c'est que du bonheur

    ++

    L

  7. #7
    CUCARACHA
    Invité(e)
    Par défaut
    Code du bouton dans le repeater :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    <td class="tdCmd">
                        <asp:Button ID="cmdCoordonnees" runat="server" Text="Coord." OnCommand="cmdRpt_onClick"  PostBackUrl="~/SA/Utilisateur/Coord.aspx"/>
                    </td>
    Evennement cmdRpt_onClick dans le code behind de la première page :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
            protected void cmdRpt_onClick(object source, CommandEventArgs e)
            {
                Button cmd = (Button)source;
     
    //C'est LA que je récupère les infos de la ligne cliquée
                HiddenField hidThisRowUserId = (HiddenField)cmd.NamingContainer.FindControl("hidIdUser");
                HiddenField hidThisRowRoleId = (HiddenField)cmd.NamingContainer.FindControl("hidIdRole");
                Label lblThisRowUserName = (Label)cmd.NamingContainer.FindControl("lblNom");
                Label lblThisRowUserRole = (Label)cmd.NamingContainer.FindControl("lblRole");
     
     
                hidSelectedUserId.Value = hidThisRowUserId.Value;
                hidSelectedRoleId.Value = hidThisRowRoleId.Value;
                hidSelectedUserName.Value = lblThisRowUserName.Text;
                hidSelectedRoleName.Value = lblThisRowUserRole.Text;
     
     
     
                Label lblCurrentUser = (Label)oTools.FindControlRecursive(this.Page.Master, "lblCurrentUser");
                string strCurrentUser = "";
    }
    Code Behind dans la sous masterpage de la page cible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Page.PreviousPage != null)
                {
                    Label lblCurrentUser = (Label)oTools.FindControlRecursive(this.Page.Master, "lblCurrentUser");
     
                    HiddenField hidSelectedUserId = (HiddenField)oTools.FindControlRecursive(Page.PreviousPage, "hidSelectedUserId");
                    HiddenField hidSelectedRoleId = (HiddenField)oTools.FindControlRecursive(Page.PreviousPage, "hidSelectedRoleId");
     
                    HiddenField hidSelectedUserName = (HiddenField)oTools.FindControlRecursive(Page.PreviousPage, "hidSelectedUserName");
                    HiddenField hidSelectedRoleName = (HiddenField)oTools.FindControlRecursive(Page.PreviousPage, "hidSelectedRoleName");
     
                    string strCurrentUser = "";
                    strCurrentUser = String.Format("[{0} en tant que {1}]", hidSelectedUserName.Value, hidSelectedRoleName.Value);
                    lblCurrentUser.Text = strCurrentUser;
                }            
            }
    Et ca donne :

    Super administration : Utilisateurs : Coordonnées utilisateur [User_1 en tant que patient]

    Les mots soulignés sont bien des liens qui me permettent de naviguer en arrière, c'est exactement ce que je souhaitais.

    C'est plus clair ?

    ++

    Laurent

Discussions similaires

  1. transfert complet ou redirection nom de domaine?
    Par ricfred dans le forum Hébergement
    Réponses: 0
    Dernier message: 10/12/2009, 09h21
  2. Redirection 301 et transfert de PageRank
    Par remus69 dans le forum Référencement
    Réponses: 5
    Dernier message: 07/09/2009, 22h11
  3. [TImage] Transfert de Picture par pixels.
    Par H2D dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2003, 14h37
  4. Problème de transfert FTP sous IIS
    Par thanathz dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo