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 :

Gestion des évennements dans un UserControl


Sujet :

ASP.NET

  1. #1
    CUCARACHA
    Invité(e)
    Par défaut Gestion des évennements dans un UserControl
    Salut

    Je travaille actuellement sur un UserControl personnalisé qui a pour fonction de générer soit un menu vertical, soit une liste de liens illustrés par des icones.

    Etant donné que ce composant est présent dans toutes mes masterpages, j’ai créé 2 événements qui me permettent de déclencher l’enregistrement des statistiques de visite des pages.

    Je précise que le projet utilise Ajax 3.0. mais que mon contrôle n’est jamais dans un updatepannel.

    J’ai également créé une classe dérivée de EventArgs qui me renvoie les informations nécessaires à l’enregistrement des statistiques.

    Voici le code de la classe :

    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
    30
    31
    32
    33
    34
     
    using System;
    /// <summary>
    /// Classe EventArg pour les linkbutton en vue des stats
    /// </summary>
    public class MenusEventArgs:EventArgs 
    {
        private readonly string _strFromURL;
        private readonly string _strToURL;
        private readonly int _moduleId;
        //Constructor
        public MenusEventArgs(string strFromURL, string strToURL, int moduleId)
        {
            this._strFromURL = strFromURL;
            this._strToURL = strToURL;
            this._moduleId = moduleId;
        }
     
        #region Properties
        public string FromURL
        {
            get { return _strFromURL; }
        }
        public string ToURL
        {
            get { return _strToURL; }
        }
     
        public int ModuleId
        {
            get { return this._moduleId; }
        }
        #endregion
    }
    Dans mon user control, j’ai créé 2 événements avec leurs délégués.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public delegate void MenusEventHandler(object sender, MenusEventArgs e);
        public delegate void MenuLoadedHandler(object sender, MenusEventArgs e);
        public event MenusEventHandler MenusNavigationRequested;
        public event MenuLoadedHandler MenuLoaded;
    J'appelle l'évennement MenuNavigationRequested depuis le Item Command de mon repeater (L'autre fonctionne parfaitement) :

    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
     
        protected void rptMenu_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "goTo":
                    string strFrom = e.CommandArgument.ToString().Split('|')[0];
                    string strTo = e.CommandArgument.ToString().Split('|')[1];
                    string modId = e.CommandArgument.ToString().Split('|')[2];
                    MenusEventArgs _e = new MenusEventArgs(strFrom, strTo, int.Parse(modId));
                    //--ICI>> MenusNavigationRequested(this, _e); //ToDo Problème a résoudre, peut être AJAX, je ne sais pas... Laurent
                    Response.Redirect(strTo);
                    break;
            }
        }
    J'ai une erreur sur le déclenchement de l'évennement (pas à tous les coups) m'indiquant que MenusNavigationRequested est null.

    On a regardé ici à plusieurs ingés, on a pas compris...

    Quelqu'un aurait une idée ?

    D'avance merci

    Laurent

  2. #2
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Points : 227
    Points
    227
    Par défaut
    salut

    j'ai eu un probleme similaire j'ai relosu le probleme avec un parametre dans le viewstate.

    bon code

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    MenusNavigationRequested sera null s'il n'y a pas de méthodes abonnées à l'événement.

    Le codage classique de l'appel à un événement consiste à faire une méthode "On[NomEvenement]" prenant en paramètre un objet EventArgs (ou une classe dérivée de EventArgs suivant l'événement).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void OnMenusNavigationRequested(MenusEventArgs e)
    {
        if (MenusNavigationRequested != null)
        {
            MenusNavigationRequested(this, e);
        }
    }
    La méthode peut être protected virtual si l'héritage est possible, afin d'y donner accès aux classes enfants.

    Ensuite quand tu veux déclencher l'événement tu appelles cette méthode.

    Au passage, si tu travailles avec le framework 2.0, tu peux simplifier la déclaration de tes événements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public event EventHandler<MenusEventArgs> MenusNavigationRequested;
    public event EventHandler<MenusEventArgs> MenuLoaded;
    Je ne fais pas d'ASP.Net, mais un événement reste un événement, donc je ne pense pas avoir dit de bêtises

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut J'adore ce site et notre métier :)
    Salut,

    Merci, franchement je doutais que l'on puisse me fournir une réponse, et aussi vite, c'est le top.

    Merci encore pour ton aide précieuse...

    ++

    Laurent

Discussions similaires

  1. Gestion des events dans un usercontrol
    Par Aidenam dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/05/2009, 21h05
  2. [Référencement] Gestion des "includes" dans Google
    Par odelayen dans le forum Référencement
    Réponses: 5
    Dernier message: 20/04/2005, 17h07
  3. [Sécurité]Gestion des accès dans plusieurs bases
    Par vincentj dans le forum Débuter
    Réponses: 1
    Dernier message: 05/01/2005, 14h19
  4. Gestion des headers dans un Makefile
    Par Weren dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 09/11/2004, 10h44
  5. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20

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