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 :

Problème lors de l'ajout d'un évènement à un UserControl


Sujet :

ASP.NET

  1. #1
    Membre actif Avatar de cfillion
    Homme Profil pro
    Arrangeur musical
    Inscrit en
    Avril 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Arrangeur musical
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2010
    Messages : 49
    Par défaut Problème lors de l'ajout d'un évènement à un UserControl
    Bonjour à tous, voici mon problème :
    Pour connecter un UserControl à la page parente pour modifier une propriété de la page maître,
    j'ai trouvé le code suivant :
    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
    // .ascx.cs
    public event System.EventHandler Error;
     
    protected void Message(string Message, int Type)
    {
    	CommandEventArgs e = new CommandEventArgs(Message, Type);
     
    	this.Error(this, e);
    }
     
    // .aspx
     
    <userControls:SiteMapManager ID="SiteMapManager" runat="server"></userControls:SiteMapManager>
    <% SiteMapManager.Error += new EventHandler(SiteMapManager_Error);  %>
     
    // .aspx.cs
     
    protected void SiteMapManager_Error(object sender, EventArgs e)
    {
    	CommandEventArgs EventArgs = (CommandEventArgs)e;
     
    	if ((int)EventArgs.CommandArgument == 1) // Information
    		Master.MessageInfo = EventArgs.CommandName;
    	else if ((int)EventArgs.CommandArgument == 0) // Erreur
    		Master.MessageErreur = EventArgs.CommandName;
    	else
    		Master.MessageErreur = "Impossible de lire le message retourné par le contrôle.";
    }
    Lors de l'éxecution, j'obtient le message d'erreur suivant :
    Erreur du serveur dans l'application '/MonApplication'.
    La référence d'objet n'est pas définie à une instance d'un objet.
    Erreur source : this.Error(this, e);
    Que faire (et merci d'avance) ?

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Quelles sont les valeurs des différents paramètres avant le bug?
    Que donne l'exécution pas à pas?

    Sinon, si nous faisons une analogie entre une page et une famille. On peut vérifier ceci:
    • Un contrôle ne connait pas ses parents
    • Un contrôle connaît ses enfants
    • Un contrôle ne connait pas ses petits enfants.
    Ok ça n'a pas l'air d'une famille très soudée mais bon.
    Du coup, la recherche d'un parent par un contrôle est délicate.
    Pour connecter un UserControl à la page parente pour modifier une propriété de la page maître
    Sinon, deux sujets dans la FAQ:

    Et un tuto: http://lutecefalco.developpez.com/tu...-page-asp-net/

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre actif Avatar de cfillion
    Homme Profil pro
    Arrangeur musical
    Inscrit en
    Avril 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Arrangeur musical
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2010
    Messages : 49
    Par défaut
    Le message d'erreur :

    Avant, j'avais tout mit dans la page, donc pour afficher un message je faisais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Master.MessageErreur = "Ceci est un message d'erreur";
    Et ça fonctionne très bien. Maintenant, pour libérer de la place dans la page,
    j'ai essayé de mettre le contenu des modules dans des UserControls.
    Donc, afin de pouvoir afficher les messages, j'ai voulu utiliser les évènement...

  4. #4
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Normalement, ce que je t'ai dit précédemment devrait t'aider à comprendre.

    Postulat:
    Citation Envoyé par Immobilis Voir le message
    Sinon, si nous faisons une analogie entre une page et une famille. On peut vérifier ceci:
    • Un contrôle ne connait pas ses parents (page, master page)
    • Un contrôle connaît ses enfants (user control)
    • Un contrôle ne connait pas ses petits enfants (control de user control).
    Ton usercontrol ne connait pas son parent (la page dans laquelle il se trouve), encore moins son grand-parent (master page).

    Le tuto devrait t'apporter la solution.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre actif Avatar de cfillion
    Homme Profil pro
    Arrangeur musical
    Inscrit en
    Avril 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Arrangeur musical
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2010
    Messages : 49
    Par défaut
    Donc, si j'ai bien compris, je ne doit pas utiliser les évènements ?

  6. #6
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Si si, mais lors d'un evènement tu ne peux (devrais) pas demander au usercontrol de mettre à jour la master page. C'est mon point de vu.
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #7
    Membre actif Avatar de cfillion
    Homme Profil pro
    Arrangeur musical
    Inscrit en
    Avril 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Arrangeur musical
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2010
    Messages : 49
    Par défaut
    C'est ce que j'ai toujours voulu faire : c'est la page qui modifie le master page...
    Le UserControl envoie un évènement avec les détails de l'erreur et la page .aspx récupère ces informations.
    Exemple : Quand une l'opération à fonctionné, le UserControl appele sa méthode Message(string Message, int Type); avec le message et le type.
    La méthode crée un CommandEventArgs avec ces information et déclanche l'évènement.
    Le problème, c'est que l'évènement vaut... null.

    EDIT : Car l'évènement, c'est le UserControl qui le déclanche (normal, c'est son évènement )...

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Mets un point d'arrêt sur la ligne 29 pour vérifier quelle variable est nulle. Cela devrait nous aider à comprendre.

    Ceci dit, j'ai l'impression que tu te compliques un peu la vie. Qu'est-ce que tu veux faire exactement? D'après ce que je comprend, tu veux faire remonter l'erreur dans la Page quand elle se produit dans un UserControl? Ta méthode n'est pas la solution la plus simple. Je te rappelle qu'un contrôle ne sait pas dans quelle page il se trouve.

    En web, quand une erreur est jetée elle est soit traitée dans un try...catch...finally... soit elle termine dans une page spécialement dédiée. Tu risques de ne pas pouvoir t'en sortir si tu dois implémenter ça dans chaque contrôle.

    De plus, une fois encore,
    Le UserControl envoie un évènement avec les détails de l'erreur et la page .aspx récupère ces informations.
    Ceci ne devrait pas être fait. Un UserControl est un bout de code qui doit être indépendant du contexte dans lequel il se trouve. Si tu souhaites utiliser un contrôle qui ne fonctionne que si la Page dans laquelle il se trouve possède un propriété "Toto", tu prends un risque.

    Toutefois, une bonne manière de traiter cette question est de:
    • Présenter une propriété Message sur ton contrôle
    • Abonner ta page à l'évènement "changement" de cette propriété.
    Tu trouveras une application web mettant ce principe en oeuvre ici: http://dl.free.fr/rBm9GVH9w

    Dis-moi si tu as des soucis.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  9. #9
    Membre actif Avatar de cfillion
    Homme Profil pro
    Arrangeur musical
    Inscrit en
    Avril 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Arrangeur musical
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2010
    Messages : 49
    Par défaut
    Merci beaucoup pour le lien, ça marche !
    Je crois que le problème était que je connectait l'évènement à la page dans la page, et non dans le code-behind...

  10. #10
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par cfillion Voir le message
    Merci beaucoup pour le lien, ça marche !
    Le lien, les sources? Elles t'ont aidé?
    Citation Envoyé par cfillion Voir le message
    Je crois que le problème était que je connectait l'évènement à la page dans la page, et non dans le code-behind...
    Pas sûr de comprendre

    Si c'est résolu c'est cool. Le pilotage des contrôles est très intéressant je trouve.

    A+

    PS: Tu es Canadien? J'ai mon fils qui est à Hamilton en ce moment
    "Winter is coming" (ma nouvelle page d'accueil)

  11. #11
    Membre actif Avatar de cfillion
    Homme Profil pro
    Arrangeur musical
    Inscrit en
    Avril 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Arrangeur musical
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2010
    Messages : 49
    Par défaut
    Je crois que le problème venait que j'avais mit le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SiteMapManager.Error += new EventHandler(SiteMapManager_Error);
    dans la page .aspx et non dans le code (.aspx.cs).
    Car depuis que je l'ai mit dans le Page_Load, ça fonctionne.

    P.S. Oui, mais au Québec.

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

Discussions similaires

  1. [Irrlicht]Problème lors de l'ajout d'objet
    Par _SamSoft_ dans le forum Irrlicht
    Réponses: 0
    Dernier message: 09/06/2008, 21h20
  2. problème lors de l'ajout de logiciels
    Par jamjam19 dans le forum RedHat / CentOS / Fedora
    Réponses: 5
    Dernier message: 21/02/2008, 09h37
  3. Problèmes lors de l'ajout de nouvelles polices windows
    Par spynux dans le forum Windows XP
    Réponses: 9
    Dernier message: 01/08/2007, 23h01
  4. Problème lors de l'ajout d'un port
    Par zehle dans le forum VHDL
    Réponses: 1
    Dernier message: 24/05/2006, 22h44
  5. [Client mail] Problème lors de l'ajout des comptes
    Par Leobaillard dans le forum Web & réseau
    Réponses: 9
    Dernier message: 19/11/2005, 18h12

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