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 :

Pb user control pour trigger d'UpdatePanel


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 45
    Par défaut Pb user control pour trigger d'UpdatePanel
    Bonjour,

    Ma question se pose dans le cadre d'un site web asp.net/C# 3.5.

    J'ai un UpdatePanel UP1 auquel est associé deux triggers (2 éléments à cliquer situés dans un UpdatePanel UP0). Je voudrais, lorsque l'un des triggers se déclenche, pouvoir récupérer ses informations (l'id, le texte de l'élément cliqué) pour pouvoir rafraîchir UP1 avec une méthode qui prend des paramètres.

    Donc a priori c'est tout indiqué d'utiliser AsyncPostBackSourceElementID pour récupérer l'élément (http://msdn.microsoft.com/en-us/libr...elementid.aspx).

    Le code suivant fonctionne pour la premier des deux triggers, mais pour le 2e il me fait une erreur javascript bizarroïde dans firebug, et l'ID récupéré est celui du 1er trigger, pas de celui cliqué (j'affiche cette ID dans le TextBox "Debug" situé dans UP1).

    Le trigger est un contrôle utilisateur personnalisé FbFolder qui est en gros un Label cliquable et s'affiche avec une icône suivie d'un texte (voir son code plus bas). Et c'est cela qui pose souci, car un asp:Button fonctionne tout bien à la place. Ah ces user controls...

    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
     
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
     
            <asp:UpdatePanel ID="UP0" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
            <ContentTemplate>
            <mycontrols:FbFolder runat="server" ID="T1" Text="Lien1" Level="0" OnClick="UP0_ElementClick"></mycontrols:FbFolder>
            <mycontrols:FbFolder runat="server" ID="T2" Text="Lien2" Level="-1" OnClick="UP0_ElementClick"></mycontrols:FbFolder>
     
            </ContentTemplate>
            </asp:UpdatePanel>
     
            <asp:UpdatePanel ID="UP1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false" OnLoad="UP1_Load">
            <ContentTemplate>
            <asp:TextBox Width="100" ID="Debug" runat="server" />
            <asp:PlaceHolder runat="server" ID="UP1_PL" />
            </ContentTemplate>
            <Triggers>
            <asp:AsyncPostBackTrigger ControlID="T1" EventName="Click" />
            <asp:AsyncPostBackTrigger ControlID="T2" EventName="Click" />
            </Triggers>
            </asp:UpdatePanel>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void UP0_ElementClick(object sender, EventArgs e)
        {
           // rien
        }
     
        public void UP1_Load(object sender, EventArgs e)
        {
            string id = ScriptManager1.AsyncPostBackSourceElementID;
            Debug.Text = id;
        }
    Portions de code significatives de FbFolder (je n'écris pas les attributs qui persistent dans le ViewState par gain de place, ni la méthode de rendu html) :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    public class FbFolder : WebControl, IPostBackEventHandler
        {
    public event EventHandler Click;
     
            protected void OnClick(EventArgs e)
            {
     
                if (Click != null)
                {
     
                    Click(this, e);
                }
                // for itemCommand firing
                base.RaiseBubbleEvent(this, e);
     
     
            }
     
            public void RaisePostBackEvent(string eventArgument)
            {
     
                this.OnClick(EventArgs.Empty);
            }
    protected override void Render(HtmlTextWriter writer)
            {
     
                if (this.Page != null)
                {
     
                    // indispensable pour que les propriétés du contrôle soient postées
     
                    this.Page.VerifyRenderingInServerForm(this);
     
                }
     
                base.Render(writer);
     
            }
            protected override void AddAttributesToRender(HtmlTextWriter writer)
            {
     
                base.AddAttributesToRender(writer);
     
                string DoPostBack =
     
                 this.Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this));
     
                writer.AddAttribute(HtmlTextWriterAttribute.Onclick, DoPostBack);
     
            }
    }
    Merci pour le coup de pouce.

    Barbara

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 45
    Par défaut
    Solution : dériver mon custom web control de LinkButton car en fait c'est ce qu'il me fallait, et écrire le code de rendu html plus un peu de css pour cacher les effets de la balise "a".

    Des fois c'est plus simple de pas vouloir faire trop compliqué ^^.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/10/2009, 13h57
  2. Réponses: 4
    Dernier message: 22/10/2008, 21h34
  3. [WebForms][User Controls] Problème pour accéder aux CSS
    Par BouB dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 04/12/2006, 16h35

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