TOC

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

Controls:

UpdateProgress control

Jeden z problémů s Ajaxem je skutečnost, že protože se děje asynchronně a v pozadí, prohlížeč neukazuje žádný stav. S rychlými servery a rychlými metodami to není velký problém, ale kdykoli máte metodu, která zabírá trochu více času, uživatel bude s velkou pravděpodobností netrpělivý.

Naštěstí ASP.NET AJAX nám tento problém taky umí řešit s krásným prvkem nazvyným UpdateProgress. Bude používat naši šablonu a ukáže, že asynchronní metoda funguje. Podívejte se na následující příklad, který ukáže tento prvek v akci. Bude to vysvětleno později.

<%@ 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>UpdateProgress control</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <asp:UpdateProgress runat="server" id="PageUpdateProgress">
            <ProgressTemplate>
                Loading...
            </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:UpdatePanel runat="server" id="Panel">
            <ContentTemplate>
                <asp:Button runat="server" id="UpdateButton" onclick="UpdateButton_Click" text="Update" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>

Do Code Behind byste měli vložit následující metodu:

protected void UpdateButton_Click(object sender, EventArgs e)
{
    System.Threading.Thread.Sleep(5000);
}

Tento jednoduchý příklad vám právě ukáže, jak snadné je použít prvek UpdateProgress. Jakmile se klikne na tlačítko, script na 5 minut usne ( ve svých skutečných projektech takovýto kód nepoužívejte - zde je to jen pro demonstraci! ) a text "Loading..." se zobrazí na vaší stránce. Můžete použít cokoli v ProgressTemplate včetně obyčejných značek či ostatních prvků. Obecně se používá animované GIF, které je strategicky umístěno na stránce s použitím CSS pozicování.

Můžete dokonce použít více prvků UpdateProgress na stránce a s použitím vlastnosti AssociatedUpdatePanelID zajistíte, že každý UpdateProgress se ukazuje jen když se upravuje právě příslušný UpdatePanel.

S vlastností DynamicLayout je také dobré se seznámit. Říká, zda by stránka měla či neměla rezervovat prostor pro váš prvek progress, Jestli je nastaven na true, což je implicitní hodnota, prostor je dynamický, tudíž není rezervován, nýbrž uchopen když je prvek ukázán. Když si přejete rezervovat prostor, nastavte vlastnost na false. Abyste viděli rozdíl, přidejte vlastnost do našeho příkladu a změňte ji tam a zpět.

Jestli jsou některé vaše postbacky rychlé, UpdateProgress bude ukázán jen na velice krátký časový okamžik, výsledkem je blikající chování, které může uživatele zmást. Z tohoto důvodu můžete specifikovat minimální časový úsek, za který se běh procesu ( progress control ) ukáže. Dá se to udělat prostřednictvím atributu DisplayAfter. Zadejte počet v milisekundách, které by měly uběhnout před ukázáním běhu procesu, tedy např. 2000, když chcete čekat 2 sekundy.


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!