in

didierdanse.net

Site personnel de Didier Danse
Didier Danse's Personnal Website
Microsoft Most Valuable Professional SharePoint

didierdanse.net - Les news Developpement

ASP.NET AJAX: Tous mes UpdatePanels sont raffraîchis lors d'un retour serveur alors que seul un UpdatePanel ne devrait l'être, pourquoi?

Dans la continuité des questions / réponses sur ASP.NET AJAX (1.0 ou 3.5, peu importe dans ce cas), voici la réponse à une petite question relativement simple mais que tout développeur débutant avec ASP.NET AJAX rencontrera certainement.

Imaginons une page contenant les éléments suivants:

  • Deux update panels;
  • Un timer;
  • Un bouton et un label dans chacun des update panels.

Ceci donne une page de ce type (sans aucun chichi et ne respectant aucunement les conventions de nommage habituelles):

image

Un seul trigger est associé à l'UpdatePanel1. Celui-ci a pour but de réaliser un retour serveur asynchrone lorsque Timer1 lance l'évènement Tick, ce qui donne:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>
        <ContentTemplate>        
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        </ContentTemplate>
    </asp:UpdatePanel>

Aucun trigger n'est associé à l'UpdatePanel2 et pourtant, les deux updatepanels sont rafraichis lors de ce fameux retour asynchrone.

Ceci se justifie par le fait que, par défaut, la propriété UpdateMode des objets UpdatePanel a la valeur Always. Ainsi, quelque soit l'élément qui a effectué le retour serveur, les UpdatePanel sont raffraîchis.

Afin de mieux contrôler le rechargement des UpdatePanel, il suffit de mettre la propriété UpdateMode à la valeur Conditional. Dès lors seul les retours serveurs effectués et présents dans les triggers auront pour effet de recharger le contenu de notre UpdatePanel.

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>
        <ContentTemplate>        
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        </ContentTemplate>
    </asp:UpdatePanel>

Pour rappel, vous pouvez retrouver une Introduction à ASP.NET AJAX sur ce même site.

Published Sep 02 2008, 02:47 PM by Didier Danse
Filed under:

Comments

No Comments

Leave a Comment

(required)  
(optional)
(required)  
Add
L'auteur du site ne peut être tenu responsable des dommages que les informations fournies pourraient entraîner. Tout est cependant mis en oeuvre pour éviter tout désagrément.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems