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 :

[debutant] contrôle des elements d'une master page depuis une autre page


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut [debutant] contrôle des elements d'une master page depuis une autre page
    Bonjour,

    Voici le contexte :
    Mon site repose sur une master page contenant header,menu et en-tête et un corps avec un ContentPlaceHolder.
    Le site dispose d'un système d'authentification basé sur MemberShipProvider.
    Et la problématique :
    Je voudrais dynamiser le menu de ma master-page avec une zone apparente uniquement si l'utilisateur est authentifié.

    Une idée ?

    Cordialement,

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    T'as le control LoginView fait pour ça.
    Il propose 2 templates: <LoggedInTemplate> et <AnonymousTemplate>

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Je ne sais pas si c'est cela que tu veux faire mais pour récupérer les controles serveur de ta masterpage au niveau d'une page fille, il faut que tu rajoutes
    <%@ MasterType VirtualPath="~/MasterRapport.master" %>
    en dessous de la directive <%@page ....> dans le virtualpath tu rentres le nom de ta masterpage.

    DAns le code behind de ta page il suffit de faire 1 this.Master. ... et les éléments seront disponibles.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Merci de votre aide,

    lutecefalco,
    Mon menu est composé de plusieurs sections. (le tous en css)
    j'utilises le contrôle LoginView dans la premiere section de mon menu.
    Mais je souhaite faire apparaitre d'autres elements de menu si je suis connecté.
    Cette méthode m'obligerai à placer tous le reste de mon menu dans le LoggedInTemplate. Mais peut-être que je pars d'une mauvaise architecture...

    tortuegenie,
    Ce que tu decris est ce que je cherche à faire, mais après avoir suivi tes indications, je n'ai ps accès aux elements de ma masterpage (l'element en question est un panel contenant le menu des membres).
    this.master.nom_du_panel est inconnu..

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Si tu utilises un web.sitemap, il suffit d'appliquer des roles à chaque item et le menu s'adaptera automatiquement aux roles de ton user

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    As tu bien mis la directive <%@ MasterType %> dans ta page fille??

    Ensuite si tu utilises Visual Studio comme environnement de développement, il faut que tu génères la page master.aspx ainsi que ta page fille.aspx et après tu y a accès enfin moi je fais comme cela et ça fonctionne.

    En fait this.Master te donne accès au méthode seulement je crois.
    Si tu veux récupérer les éléments tu peux essayé soit un findControl() ou alors tu rédéfinis tes objets dans le code behind de la master.
    Par exemple pour un hyperlink:
    public partial class MasterPage : System.Web.UI.MasterPage
    {
    public HyperLink HlHomme
    {
    get
    {
    return this.hlHomme;
    }
    }
    }
    Ensuite tu utilises l'objet que tu viens de créer dans ta page fille.

    J'espère que tu as compris, sinon google est ton amis aussi.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    lutecefalco,
    "Si tu utilises un web.sitemap, il suffit d'appliquer des roles à chaque item et le menu s'adaptera automatiquement aux roles de ton user"
    et ensuite je dois utilisé le contrôle Menu.. mais je ne pourrais pas conserver ma présentation actuelle (structure des menus en css, boutons ...) ?

    tortuegenie,
    "As tu bien mis la directive <%@ MasterType %> dans ta page fille??"
    Oui
    "En fait this.Master te donne accès au méthode seulement je crois."
    J'ai déclaré une méthode en public dans ma master page mais je ne la vois pas avec this.master.nom_methode.
    "tu rédéfinis tes objets dans le code behind de la master."
    Comment peut-on supprimer l'ancienne définition, je ne la vois pas sous VS2005.

    Merci à vous,

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Normalement avec la directive que je t'ai donné, toute méthode public sont accessibles depuis la page fille.Ca marche chez moi.

    As-tu récompilé les 2 pages comme je te l'ai dis??

    Pour le reste tu crées une instance de l'objet que tu souhaites et tu déclares un accesseur get pour pouvoir l'utiliser dans la page fille.

    "l'ancienne définition".
    Comme tout compilateur, l'affectation se trouvant la plus basse au niveau du déroulement du code est pris en charge et réécrase ce qu'il y avait avant

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    oui, j'ai regenere l'ensemble du site a chaque fois.
    depuis ma page fille, j'appelle une methode publique implémentée dans
    la masterpage comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public partial class MasterPage : System.Web.UI.MasterPage
    {
        public void maj_menu(){
            Menu_membres.Visible = false;
        }
    ...
    }
    et je l'appelle depuis la classe fille comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.master.maj_menu();
    A la compilation j'ai l'erreur suivante :

    Erreur 115 'System.Web.UI.MasterPage' ne contient pas de définition pour 'maj_menu' G:\realisations\wwwroot\GestionParcST\Login.aspx.cs 24 25 G:\...\GestionParcST\

    Bon je dois certainement être sur la mauvaise voie,
    je vais regarder plus attentivement tous ça,
    Merci.

  10. #10
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    il faut que quand tu tapes this.Master. il te propose ta méthode publique.

    Je ne sais pas si c'est une erreur de copie mais c'est Master avec M et pas avec m.

    Une fois que tu as ecrit this.Master, place le curseur de la souris pour voir à quel masterpage il fait référence.

    Comme je te l'ai dis je fais la meme chose et ça marche

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    J'essaye bien avec "this.Master."
    Pour info, J'ai inclu dans ma page fille,
    juste après la balise <%@ Page ..> la ligne suivante :
    <%@ MasterType VirtualPath="~/MasterPageAccueil.master" %>
    Quand je fais this.Master., il me propose la methode public maj_menu, mais il me signale qu'elle lui est inconnue, je pense qu'il la propose car j'ai voulu la rentrer manuellement précedemment.
    le message d'erreur est toujours :System.Web.UI.MasterPage' ne contient pas de définition pour 'maj_menu'
    Quand je place le cusreur sur la propriété Master il m'indique précisemment:
    ASP.masterpageaccueil_master Login_Master

    Je dois me planter quelque part, c'est sur

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    Qu'as tu fait exactement pas à pas ?

    Quand tu as créé une nouvelle page, tu as bien sélectionné une master page ?
    Tu as bien ajouté le tag MasterPage VirtualPath .... ?
    Dans ton page load, quand tu entres this.Master. est ce que tu vois bien apparaître des propriétés, event, methods ?
    Car je viens de faire le test, et je n'ai aucun problème.

    Tu ne veux pas montrer le code de la page aspx (juste les quelque premiere lignes), le code de ta master page et le code de ta page aspx.cs

    Fix

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    "Quand tu as créé une nouvelle page, tu as bien sélectionné une master page ?"
    Oui, de ce côté là pas de problème, ma page fille hérite bien de ma masterpage.
    "Tu as bien ajouté le tag MasterPage VirtualPath .... ?"
    Dans ma page fille, juste après la balise <%@ Page ..>
    J'ai ajouté la ligne suivante :
    <%@ MasterType VirtualPath="~/MasterPageAccueil.master" %>
    "Dans ton page load, quand tu entres this.Master. est ce que tu vois bien apparaître des propriétés, event, methods ?"
    Oui, j'ai accès à tous,y compris les méthodes public de ma master page, je sélectionne alors une méthode comme ceci : this.Master.test();
    Cette méthode est déclaré comme ceci dans ma masterpage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public partial class MasterPage : System.Web.UI.MasterPage
    {
        public void maj_menu(){
            Menu_membres.Visible = false;
        }
    ...
    }
    A la compilation, la méthode test de this.Master.test(); est souligné et il est indiqué "System.Web.UI.MasterPage' ne contient pas de définition pour 'maj_menu'"

    Peut-être est-ce la déclaration de ma méthode qui est invalide ?

  14. #14
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Si j'ai bien suivi ta MasterPage s'appelle MasterPageAccueil.master

    donc dans ton code behind de la master page tu dois avoir
    public partial class MasterPageAcceuil: System.WEB.UI.MasterPage

    de meme que dans le inherits de la masterpage.

    A mon avis tu as du renommer ta MasterPage au niveau de l'explorateur de solution mais pas forcément au niveau du code.

    C'est une des seules explications que je vois

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    oui juste, je n'avais pas vu ce point, mais effectivement ce n'est pas le meme nom

    Fix

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Merci,

    Effectivement j'avais renommé ma masterpage via l'explorateur de MasterPage vers MasterPageAccueil.
    J'ai donc changé dans les mauvaises references et miracle cela fonctionne.
    merci à vous deux :

  17. #17
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Eh ben voilà, c'est bien ce que je pensais.

    Si cela fonctionne oublie pas d'appuyer sur résolu!!!!

  18. #18
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Euh dsl, j'avais pu vu LoL, il est temps que la journée se finisse

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2010, 10h02
  2. Réponses: 0
    Dernier message: 06/10/2009, 13h02
  3. Réponses: 6
    Dernier message: 16/12/2008, 16h31
  4. Réponses: 6
    Dernier message: 27/01/2008, 21h04
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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