TOC

This article is currently in the process of being translated into Czech (~99% done).

Controls:

Timer control

Prvek Timer vám umožňuje vyvolávat postbacky v jistých intervalech. Když jej použijete s UpdatePanely, které jsou nejběžnějším přístupem, umožní to časování částečných úprav na vaší stránce, ale zrovna tak to může být využito pro zpětné zaslání ( postback ) celé stránky. V této kapitole se budeme soustředit na pouřití timerů s UpdatePanely, takže jestli jste ještě nečetli kapitolu o UpdatePanelech, prosím, udělejte to nyní.

Zde je drobný příklad použití prvku Timer. Jednoduše upravuje časy každých 5 sekund.

<%@ 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>Timers</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <asp:Timer runat="server" id="UpdateTimer" interval="5000" ontick="UpdateTimer_Tick" />
        <asp:UpdatePanel runat="server" id="TimedPanel" updatemode="Conditional">
            <Triggers>
                <asp:AsyncPostBackTrigger controlid="UpdateTimer" eventname="Tick" />
            </Triggers>
            <ContentTemplate>
                <asp:Label runat="server" id="DateStampLabel" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>

V Code Behind máme jedinou funkci, kterou byste do něj měli vložit.

protected void UpdateTimer_Tick(object sender, EventArgs e)
{
    DateStampLabel.Text = DateTime.Now.ToString();
}

Tohle je vše velice jednoduché. Máme normální UpdatePanel, v němž je odkaz na trigger našeho prvku Timer. Znamená to, že panel je upraven, když Timer "tikne", tedy provede událost Tick. Prvek Timer používá atribut intervalu k definování počtu milisekund, po nichž dojde k události Tick. Jak vidíte v Code Behind výpisu, jen upravíme DateStampLabel po každé, když událost Timeru nastane. Může to být uděláno efektivněji prostřednictvím jednoduchého JavaScriptu, který by upravil čas na straně klienta bez zapojení serveru. Příklad je zde použit jen k demonstraci potenciálu prvku Timer.

Jiným přístupem je zahrnout Timer dovnitř UpdatePanelu. Když to uděláte, ušetříte si definování triggeru, ale měli byste mít na zřeteli skutečnost, že chování bude odlišné, závisející na tom, zda Timer máte uvnitř UpdatePanelu nebo mimo něj. Když je Timer uvnitř UpdatePanelu, Timer není znovu vytvořen dokud UpdatePanel není zcela upraven. To znamená, že jestliže máte Timer s intervalem 60 sekund a úprava trvá 5 sekund, další událost nebude spuštěna po 60 sekundách, nýbrž až po 62 sekundách. Na druhé straně, je-li Timer mimo UpdatePanel, uživatel uvidí obsah panelu jen po dobu 55 sekund než je znovu upraven.

Měli byste mít vždy na paměti, že přestože částečné úpravy jsou vždy méně náročné na server než opravdové postbacky, server je stále kontaktován a když užíváte časovače, můžete dostat mnoho postbacků, které mohou vše zpomalovat. Vždy používejte co možná nejvyšší intervaly a zvažte, zda kontaktovat server či ne.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!