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 :

Localisation Web UserControl


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut Localisation Web UserControl
    Bonjour à tous,
    J'ai défini un web usercontrol que j'ai nommé "incoming.ascx". Ce web control est présent dans un dossier "admin", à partir de la racine de mon site.
    Je l'ajoute à une page présente dans le dossier admin de la façon suivante et ca fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                incoming LienEvenement = new incoming();
                Control Control = LoadControl("incoming.ascx");
                LienEvenement = (incoming)Control;
                LienEvenement.GetTitre.Text = Evenement.Attributes["titre"].Value;
                LienEvenement.GetCommentaires.Text = Evenement.Attributes["details"].Value;
                UpdatePanel1.ContentTemplateContainer.Controls.Add(LienEvenement);
    Maintenant je souhaite y accéder via une page qui se trouve à la racine de mon site. Et là je fais comme suit, mais ca ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                incoming LienEvenement = new incoming();
                Control Control = LoadControl("~/admin/incoming.ascx");
                LienEvenement = (incoming)Control;
                LienEvenement.GetTitre.Text = Evenement.Attributes["titre"].Value;
                LienEvenement.GetCommentaires.Text = Evenement.Attributes["details"].Value;
                UpdatePanel1.ContentTemplateContainer.Controls.Add(LienEvenement);
    Il ne trouve pas le web usercontrol. Pourquoi? Comment le rediriger?

    Merci beaucoup de vos réponses.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    il te fait une exception sur le loadcontrol ? c'est ca ?

  3. #3
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut
    BOnjour et merci de votre réponse,
    En fait il plante à la compilation : il ne reconnait pas le usercontrol, comme s'il ne pouvait pas charger le ascx.

    Voyez-vous une erreur dans mon code?

    Merci de vos réponses, n'hésitez pas à me demander plus d'informations si je n'ai pas été suffisamment clair.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut UserControle
    Essai de mettre ton controle en dehors du repertoire "admin"...

  5. #5
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut
    BOnjour et merci de la réponse,
    Je problème est que si je sors le ascx du répertoire admin, là c'est ma page dans le rep admin qui plante.... Pourquoi l'arbo en répertoire virtuel ne fonctionne pazs?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut
    Bonjour,
    désolé pour le retard.
    Pour écarter la possibilité qu'il ne trouve pas ton controle regarde si il est vu dans tout le projet autrement dit regarde si tu a bien une dll ajouter au projet.

    Après faut voir dans quel fichier se trouve le code que tu a donné.
    Si c sur ta page .aspx ou dans aspx.cs.

    Tiens moi au courant.

    Merci.

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Par défaut
    slt

    j'ai déjà eu un problème identique que j'ai résolu, j'ai pas le code avec moi à l'instant, mais je te le file le plutot possible, sache néamoins qu'il ne reconnaitra jamais le controle en essayant de le déclarer, tu perds donc ton temps avec cette méthode ... je te passe la soluce d'ici demain

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    déjà, je simplifierai l'écriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    incoming LienEvenement = (incoming)LoadControl("~/admin/incoming.ascx");
    Ensuite, peux-tu copier l'erreur de compilation ?
    Es-tu sur que incoming est orthographié ainsi ?

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Par défaut encore moi
    salut, comme promis voici la source

    d'abord faut que tu réécrives le loadcontrol

    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
        public UserControl LoadControl(string UserControlPath, params object[] constructorParameters)
        {
            List<Type> constParamTypes = new List<Type>();
            foreach (object constParam in constructorParameters)
            {
                constParamTypes.Add(constParam.GetType());
            }
     
            UserControl ctl = Page.LoadControl(UserControlPath) as UserControl;
     
            // On recherche le constructeur approprié ...
            ConstructorInfo constructor = ctl.GetType().BaseType.GetConstructor(constParamTypes.ToArray());
     
            // Et on l'appelle
            if (constructor == null)
            {
                throw new MemberAccessException("Le constructeur n'existe pas : " + ctl.GetType().BaseType.ToString());
            }
            else
            {
                constructor.Invoke(ctl, constructorParameters);
            }
     
            // Et enfin, on retourne le controle
            return ctl;
        }
    ensuite voici comment tu dois l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // paramètres est utilisé si le constructeur de ton controle en prend
     
    Control MonControle = LoadControl("admin/incoming.ascx", new object[] { ...paramètres... });
    t'auras pas besoin de mettre le "~/"

    adapte le code au tien, et si t'as des questions pose les

  10. #10
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut
    Bonjour et merci beaucoup de vos réponses,

    @olymat : j'ai adapté ta méthode, ca fonctionne presque chez moi, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Control LienEvenement = LoadControl("admin/incoming.ascx", new object[] { });
                LienEvenement.GetTitre.Text = Evenement.Attributes["titre"].Value;
                LienEvenement.GetCommentaires.Text = Evenement.Attributes["details"].Value;
                PanneauAvenir.Controls.Add(LienEvenement);
    La création et l'appel du constructeur se passe bien. Par contre, dès que j'attaque des propriétés de mon Usercontrol, il ne les trouve pas (car l'objet est de type "control").il faudrait que je fasse un cast sur le type de mon objet afin de récupérer les propriétés, mais là même problème que précédemment, il ne le trouve pas... Ai-je raté quelque chose? Comment fais-tu si ton objet a des propriétés auxquelles tu veux accéder, pour le caster, étant donner que ta méthode est justement là car je n'arrive pas à caster directement?

    Déjà merci d'avoir pris le temps de me répondre !

    nixar

  11. #11
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut
    @nico-pyright(c) :

    J'ai tenté de simplifier selon ton idée, mais ca ne fonctionne pas. L'erreur renvoyée à la compilation c'est :
    "Une référence ou une directive d'assembly est manquante".
    Il semble qu'il faille ajouter mon user control à une dll et le mettre en référence sur le projet. Je voudrais éviter d'avoir une dll avec un seul user control dans mon projet. Je trouve ca assez dommage de devoir forcément faire ca... J'espère que la méthode d'Olymat pourra complètement me tirer d'affaire.

    Merci de tes réponses en tout cas !!

    Nxar

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Par défaut
    Slt,

    je te conseille pas trop d'essayer de procéder ainsi, le mieu aurait été de passer les valeurs en paramètres dans le constructeur, et de faire les traitements dans directement dans le controle

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Control LienEvenement = LoadControl("admin/incoming.ascx", new object[] { Evenement.Attributes["titre"].Value, Evenement.Attributes["details"].Value });
     
    PanneauAvenir.Controls.Add(LienEvenement);
    Mais si tu tiens vraiment à procéder comme tu le fais, voici ce que tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Control LienEvenement = LoadControl("admin/incoming.ascx", new object[] { });
     
    // En supposant que tu utilises des labels dans ton controle
     
    ((Label)LienEvenement.FindControl("GetTitre")).Text = Evenement.Attributes["titre"].Value;
    ((Label)LienEvenement.FindControl("GetCommentaires")).Text = Evenement.Attributes["details"].Value;
     
    PanneauAvenir.Controls.Add(LienEvenement);
    ça devrait aller ...

  13. #13
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut
    Merci BEAUCOUP pour la clarté et la rapidité de ta réponse.. qui en plus fonctionne parfaitement.

    Un grand merci !

    Nixar

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

Discussions similaires

  1. [SP-2007] Localisation usercontrol ascx
    Par Magohamoths dans le forum SharePoint
    Réponses: 1
    Dernier message: 04/05/2009, 10h34
  2. click button dans web usercontrol ne foncionne pas?
    Par rikidi dans le forum ASP.NET
    Réponses: 7
    Dernier message: 16/06/2008, 17h05
  3. Localisation du web.xml
    Par RémyYves dans le forum Maven
    Réponses: 1
    Dernier message: 13/12/2007, 11h54
  4. Web UserControl + héritage
    Par webworker dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/06/2007, 15h42

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