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 :

[C# 2.0] Probleme de label dans ma masterpage qui ne se rafraichit pas


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut [C# 2.0] Probleme de label dans ma masterpage qui ne se rafraichit pas
    Bonjour à tous !

    Je débute dans le monde Asp.net et je dois dire que ce n'est pas évident !

    J'utilise une masterpage dans laquelle j'ai ajouter un label.

    Quand mon site debute, on se retrouve sur une page de login, si le login est ok je stocke dans Session des informations le concernant.

    Une fois logguée est avant de rediriger vers ma page Accueil, j'aimerais afficher dans un label le message suivant "Utilisateur connecté : nom, prenom"

    Pour ce faire j'ai ajouter une procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void SetUser(string nom, string prenom)
        {
            this.Lbl_USER.Text = "Utilisateur connecté : " + nom + ", " + prenom;
            //this.Lbl_USER
     
        }
    Ensuite j'appelle ma procédure dans ma page login
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Master.SetUser((string)Session["Nom"], (string)Session["Prenom"]);
    Apparemment, la procédure est ok mais mon label ne se met pas à jour.

    Du coup le label reste vide.

    J'ai essayer de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Lbl_USER.DataBind();
    Mais ce n'est pas ca ou alors je le fais mal (j'ajouter cette ligne dans ma fonction SetUser)

    Merci d'avance de vos réponses concernant ce probleme de referesh

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Bonjour à tous !

    Dsl de faire remonter le post, mais j'ai besoin d'un peu d'aide sur ce sujet.

    Si mon post manque de détails ou si ce n'est pas explicite, n'hésitez pas à me le dire. J'apporterais des infos complémentaires.

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  3. #3
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Si j'ai bien compris, tu appelles SetUser dans ta page de contenu (Login) ?
    Si c'est bien le cas, est-ce que par hasard tu n'initialiserais pas ton label en question dans la fonction Page_Load de ta Master Page ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Merci de te pencher sur mon problème.

    En fait non je ne touche pas à mon label dans page_load.

    La seule que j'ai fait dans la mesure ou je suis en phase de développement c'est d'écrire le mot test dans la propriété text de mon label.

    J'ai lancer l'application et laisser quelques points d'arrets et après plusieurs tests, ma fonction setuser() est bien appelée, mais le label ne se rafraichit pas.

    J'ai d'ailleurs un problème similaire avec mon treeview dans ma masterpage.

    Du coup je suis un dérouté par le fait que ca ne se mette pas à jour (je viens du monde winforms et le passage aux webforms ne se fait pas sans douleur)

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  5. #5
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Ca donne quoi si tu fais ton SetUser dans le Page_Load de ta Master Page ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    ton viewstate de ton label est a true ou false ?

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Donc en résumé.

    mon Label n'a pas de propriété ViewState (j'ai vérifier qu'il etait bien visible donc ca c'est ok).

    Ensuite mettre la fonction dans le page_load ne répond pas à mon problème.

    En gros ma MasterPage est déjà chargé au moment ou ma page de login s'ouvre.

    Donc en fait j'ouvre Login.aspx dont La page Maître est ma MasterPage, ensuite je me loggue.

    Si le loggue est ok, j'appelle ma fonction set_user de manière à mettre à jour un label dans lequel je veux indiquer qui est connecté.

    Maintenant si il y a une raison pour que j'ecrive ma fonction dans le page_load de ma MasterPage, j'aimerais une petite explication car ca me parait curieux

    Merci de vos réponses et j'espere faire avancer le schmilblik !

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  8. #8
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Tu saurais mettre les sources de ta page login et ta master page (ce qui nous intéresse évidemment ) ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    OK OK !

    La fonction SetUser de ma MasterPage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void SetUser(string nom, string prenom)
        {
            this.Lbl_USER.Text = "Utilisateur connecté : " + nom + ", " + prenom;
            //this.Lbl_USER
        }
    Ma page de Login :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {
            if (User_Login(Login1.UserName, Login1.Password))
            {
                Master.SetUser((string)Session["Nom"], (string)Session["Prenom"]);
             }
        }
    Et enfin j'ai ajouter dans ma page Login.aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ MasterType  virtualPath="~/MasterPage.master"%>
    de manière à pouvoir utiliser les fonctions de ma master page.

    Je peux tout aussi bien passer par le global.asax si il le faut !

    @+

    HIrochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  10. #10
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
            if (User_Login(Login1.UserName, Login1.Password))
            {
                Master.SetUser((string)Session["Nom"], (string)Session["Prenom"]);
             }
    }
    C'est dans User_Login que tu mets à jour tes objets de Session ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Non non !!!

    En fait je mets a jour mes éléments de session dans ma fonction User_Login

    Ensuite je veux juste récupérer le nom et le prenom de la personne connectée dans ma variable Session.

    Je peux concevoir que ce ne soit pas la meilleure manière mais je débute en Asp.net et je ne connais pas trop les meilleurs techniques pour faire un site propre (en terme de codage).

    Autres informations intéressantes je viens de placer un espion sur mon label.text, celui ci contient bien ma chaine "Utilisateur connecté : prenom, nom"

    Donc en gros ca me parait vraiment être un problème de rafraichissement sur mon label car au démarrage la label contient la chaine "Test". Une fois connectée on voit toujours le mot Test alors que la propriété text du label (via espion) renvoie bien la chaîne que je lui affecte.

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  12. #12
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    essaye de faire :
    Juste après lui avoir mis les informations de connexion... On ne sait jamais.

    Sinon, je finis par me demander si quand ta masterpage ne remet pas à chaque fois Test dans ton label...
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Donc après avoir chercher je n'ai pas de fonction .Invalidate() disponible pour mon label.

    J'ai tester en laissant le .text de mon lable à vide (bien sur au final il sera vide au démarrage) et ca ne change rien !

    Ce serait curieux qu'il s'amuse à recharger la valeur d'origine puisqu'au moins un fois par programme je le modifie !

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  14. #14
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Si j'étais toi je ferais déjà ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Master.SetUser("toto","tutu");
    Pour déjà être certain que ton problème ne vienne pas de ta manip session.


    Si tu obtiens bien "toto" et "tutu" c'est que c'est du côté de ta session qu'il y a un problème auquel cas, je mettrais un breakpoint juste avant l'enregistrement dans la session pour vérifier la valeur des variables que tu enregistres.

    Fais aussi peut-être éventuellement une recherche (dans tout le projet) sur la chaîne de caractère "Lbl_USER.Text" pour être certain qu'aucune valeur d'initialisation ne traîne.

    Et sinon, tu peux toujours tracer les changements de valeur sur ce contrôle en mettant une condition sur ton breakpoint.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    Salut,

    est ce que à cet endroit tu as bien qqch dans userName et Password ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {
            if (User_Login(Login1.UserName, Login1.Password))
            {
                Master.SetUser((string)Session["Nom"], (string)Session["Prenom"]);
             }
        }
    Je ne suis pas vraiment expert dans le nouveau control de .net 2.0 mais j'utilise Login1_LoggedIn et à ce moment, le contrôle a fait tout ces check personel (vérif pass, vérif si existe, ....) et tu peux récupérer tes datas entré pour te logger.

    Et en faite via le controle Login de ASP.NET 2.0 tu peux connaitre tout le temps le login et le role de ton utilisateur, tu as plein de méthodes via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Membership.getUser().UserName
    et cela à n'importe quel endroit de ton site.

    Fix

  16. #16
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Merci de ta réponse !

    Tu avais raison, apparemment Le form_load était effectuée après ma fonction setuser et du coup mon label se réinitialisait.

    Maintenant Question subsidiaire pour ma propre compréhension.

    J'aimerais savoir pourquoi mon label se réinitialise à chaque Form_Load()

    J'ai aussi ajouter un booléen à ma masterpage (pour des tests)

    Une fonction le met à true, pourtant à chaque fois que la fonction form_load de ma master_page est appelée, mon booléen repasse systématiquement à false.

    En fait comment je fais pour conserver des variables dans un état, si elles ne sont utilisés que pour une page (je viens du monde winform et j'avais l'habitude d'ajouter des variables dans mes pages et de surcharger la fonction form_load avec des paramêtres)

    En gros voila mon code :

    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
    23
    24
    25
    26
    27
    28
    29
     
    public partial class MasterPage : System.Web.UI.MasterPage
    {
        private Boolean Lbl_User;
     
        protected void Page_Load(object sender, EventArgs e)
        {
            SetUser();
        }
        public void SetUser()
        {
            if (!Lbl_User)
            {
     
                if (Session["Nom"] != null && Session["Prenom"] != null)
                {
                    Lbl_User = true;
                    string nom = (string)Session["Nom"];
                    string prenom = (string)Session["Prenom"];
                    this.Lbl_USER.Text = "Utilisateur connecté : " + nom + ", " + prenom;
                    //this.TextBox1.Text = "Utilisateur connecté : " + nom + ", " + prenom;
                }
                else
                {
                    Lbl_User = false;
                }
            }
        }
    }
    Ma variable Lbl_User repasse systématiquement à false alors que j'ai bien des informations dans ma variable de Session.

    Je mettrais résolu en fin de journée qu'on me fournisse des infos concernant ce léger problême ou pas.

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    met ta methode setUser() entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    if(!isPostBack)
    {
       setUser();
    }
    à chaque action dans ton site, celui ci se rafraichit et repasse dans le Page_Load => isPostBack vérifie que tu n'y repasses pas chaque fois sauf si évidemment tu changes de page et reviens à celle-ci

    Fix

  18. #18
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Merci beaucoup de ta réponse !

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Fonction php stockée dans ma DB qui ne s'exécute pas
    Par steiner62 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 30/10/2008, 15h05
  2. Avoir scanf dans un compilateur qui ne l'a pas
    Par ProgVal dans le forum Bibliothèque standard
    Réponses: 7
    Dernier message: 05/04/2008, 14h13
  3. Réponses: 3
    Dernier message: 15/11/2006, 13h46
  4. Probleme ajout label dans une fenetre
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 05/11/2005, 17h51
  5. [D7-EXCEL2000] Formule dans cellule Excel qui ne se calcule pas
    Par Albertolino dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/09/2003, 14h18

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