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):
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.