Este é um exemplo simples de como atualizar automaticamente o conteúdo de um UpdatePanel através de um controle Timer do ASP.NET - nada muito diferente.
Talvez a única observação interessante a acrescentar seja que o timer é definido como sendo um gatilho (trigger) externo ao UpdatePanel. Dessa maneira, o conteúdo do painel é atualizado automaticamente a cada ciclo do timer, sem que o restante da página seja afetado.
‹%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %›
‹!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"›
‹html xmlns="http://www.w3.org/1999/xhtml"›
‹head runat="server"›
‹title›Exemplo: ASP.NET Timer‹/title›
‹/head›
‹body›
‹form id="form1" runat="server"›
‹!-- necessário para ajax.net --›
‹asp:ScriptManager ID="ScriptManager1" runat="server" /›
‹div›
‹!-- timer que atualiza o updatepanel --›
‹asp:Timer ID="timer" runat="server" Interval="1000"
Enabled="true" OnTick="timer_Tick"›‹/asp:Timer›
‹!-- região a ser atualizada --›
‹asp:UpdatePanel ID="UpdatePanel1"
runat="server" UpdateMode="Conditional"›
‹Triggers›
‹asp:AsyncPostBackTrigger ControlID="timer"/›
‹/Triggers›
‹ContentTemplate›
‹!-- controles afetados --›
‹asp:Label ID="Label1" runat="server"›
‹/asp:Label›
‹/ContentTemplate›
‹/asp:UpdatePanel›
‹/div›
‹/form›
‹/body›
‹/html›
Também é interessante observar que, numa situação mais específica como, por exemplo, UpdatePanels aninhados, alguns comportamentos esdrúxulos podem aparecer. Neste caso, talvez ajude incluir a propriedade RenderMode="Inline" na declaração do UpdatePanel.
E o code behind da página:
using System;
using System.Web.UI;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
timer.Tick += new EventHandler‹EventArgs›(timer_Tick);
}
public void timer_Tick(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}
}
Como o ambiente é naturalmente lento, a frequência de atualização deve ser estimada com cuidado.
