Si tienes dos o más controles UpdatePanel que quieres que se actualicen por separado, quizás también quieras tener diferentes indicadores “un momento por favor…” para cada uno de ellos, con la finalidad de que se muestren en diferentes posiciones.
Antes de darte la solución considera este código:
-
<asp:ScriptManager ID="ScriptManager1" runat="server" />
-
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
-
<Triggers>
-
<asp:AsyncPostBackTrigger ControlID="Boton1" EventName="Click" />
-
</Triggers>
-
<ContentTemplate>
-
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0">
-
<ProgressTemplate>
-
Un momento por favor...
-
</ProgressTemplate>
-
</asp:UpdateProgress>
-
<asp:Button ID="Boton1" runat="server" Text="Botón 1" />
-
<asp:Label ID="Hora1" runat="server" Text="<br />"></asp:Label>
-
</ContentTemplate>
-
</asp:UpdatePanel>
-
<br />
-
<br />
-
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
-
<Triggers>
-
<asp:AsyncPostBackTrigger ControlID="Boton2" EventName="Click" />
-
</Triggers>
-
<ContentTemplate>
-
<asp:UpdateProgress ID="UpdateProgress2" runat="server" DisplayAfter="0">
-
<ProgressTemplate>
-
Un momento por favor...
-
</ProgressTemplate>
-
</asp:UpdateProgress>
-
<asp:Button ID="Boton2" runat="server" Text="Botón 2" />
-
<asp:Label ID="Hora2" runat="server" Text=""></asp:Label>
-
</ContentTemplate>
-
</asp:UpdatePanel>
-
Protected Sub Boton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Boton1.Click
-
Threading.Thread.Sleep(1000)
-
Hora1.Text = "La hora es " & Now.ToString
-
End Sub
-
-
Protected Sub Boton2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Boton2.Click
-
Threading.Thread.Sleep(1000)
-
Hora2.Text = "La hora es " & Now.ToString
-
End Sub
El cual genera lo siguiente:
Y al hacer clic en el botón 1 (o en el 2) ocurre lo siguiente:
Los dos controles UpdateProgress aparecieron porque es su comportamiento natural cuando se hace un postBack. Obviamente queremos que cada uno aparezca únicamente cuando se haga clic en su botón correspondiente.
Para hacerlo, utiliza la propiedad AssociatedUpdatePanelID del control UpdateProgress, de tal forma que tu código quede así:
-
<asp:ScriptManager ID="ScriptManager1" runat="server" />
-
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
-
<Triggers>
-
<asp:AsyncPostBackTrigger ControlID="Boton1" EventName="Click" />
-
</Triggers>
-
<ContentTemplate>
-
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="UpdatePanel1">
-
<ProgressTemplate>
-
Un momento por favor...
-
</ProgressTemplate>
-
</asp:UpdateProgress>
-
<asp:Button ID="Boton1" runat="server" Text="Botón 1" />
-
<asp:Label ID="Hora1" runat="server" Text="<br />"></asp:Label>
-
</ContentTemplate>
-
</asp:UpdatePanel>
-
<br />
-
<br />
-
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
-
<Triggers>
-
<asp:AsyncPostBackTrigger ControlID="Boton2" EventName="Click" />
-
</Triggers>
-
<ContentTemplate>
-
<asp:UpdateProgress ID="UpdateProgress2" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="UpdatePanel2">
-
<ProgressTemplate>
-
Un momento por favor...
-
</ProgressTemplate>
-
</asp:UpdateProgress>
-
<asp:Button ID="Boton2" runat="server" Text="Botón 2" />
-
<asp:Label ID="Hora2" runat="server" Text=""></asp:Label>
-
</ContentTemplate>
-
</asp:UpdatePanel>
El código VB quedaría igual
De esta forma al oprimir el primer botón ocurrirá esto:
Y al oprimir el segundo botón verás esto:
De esta forma puedes colocar varios indicadores para cada una de las partes en las que dividas visualmente tu página.