Übersicht über das UpdateProgress-Steuerelement
Aktualisiert: November 2007
Das UpdateProgress-Steuerelement stellt Statusinformationen über Teilaktualisierungen von Seiten in UpdatePanel-Steuerelementen bereit. Sie können den Standardinhalt und das Layout des UpdateProgress-Steuerelements anpassen. Um ein Aufblitzen des Steuerelements bei sehr schnellen Teilaktualisierungen von Seiten zu verhindern, können Sie eine Verzögerung vor dem Anzeigen des UpdateProgress-Steuerelements festlegen.
Dieses Thema enthält Informationen über:
Szenarien
Hintergrund
Codebeispiele
Klassenreferenz
Szenarien
Mithilfe des UpdateProgress-Steuerelements können Sie die Benutzeroberfläche intuitiver gestalten, wenn eine Webseite eines oder mehrere UpdatePanel-Steuerelemente für das Teilrendering von Seiten enthält. Erfolgt die Teilaktualisierung von Seiten langsam, können Sie mit dem UpdateProgress-Steuerelement ein visuelles Feedback zum Status der Aktualisierung geben. Sie können auf einer Seite mehrere UpdateProgress-Steuerelemente platzieren, die jeweils einem anderen UpdatePanel-Steuerelement zugeordnet sind. Sie können jedoch auch ein einzelnes UpdateProgress-Steuerelement allen UpdatePanel-Steuerelementen auf der Seite zuordnen.
Hintergrund
Das UpdateProgress-Steuerelement rendert ein <div>-Element, das ein- oder ausgeblendet wird. Dies hängt davon ab, ob durch ein zugeordnetes UpdatePanel-Steuerelement ein asynchrones Postback verursacht wurde. Beim ersten Seitenrendering und bei synchronen Postbacks wird das UpdateProgress-Steuerelement nicht angezeigt.
Zuordnen eines UpdateProgress-Steuerelements zu einem UpdatePanel-Steuerelement
Ein UpdateProgress-Steuerelement wird einem UpdatePanel-Steuerelement zugeordnet, indem die AssociatedUpdatePanelID-Eigenschaft des UpdateProgress-Steuerelements festgelegt wird. Wenn ein Postbackereignis aus einem UpdatePanel-Steuerelement stammt, werden alle zugeordneten UpdateProgress-Steuerelemente angezeigt. Wenn Sie das UpdateProgress-Steuerelement keinem bestimmten UpdatePanel-Steuerelement zuordnen, zeigt das UpdateProgress-Steuerelement den Status aller asynchronen Postbacks an.
Wenn die ChildrenAsTriggers-Eigenschaft eines UpdatePanel-Steuerelements auf false festgelegt ist und ein asynchrones Postback aus diesem UpdatePanel-Steuerelement stammt, werden alle zugeordneten UpdateProgress-Steuerelemente angezeigt.
Erstellen von Inhalt für das UpdateProgress-Steuerelement
Verwenden Sie die ProgressTemplate-Eigenschaft, um die von einem UpdateProgress-Steuerelement angezeigte Meldung deklarativ anzugeben. Das <ProgressTemplate>-Element kann HTML und Markup enthalten. Das folgende Beispiel zeigt, wie eine Meldung für ein UpdateProgress-Steuerelement angegeben wird.
<asp:UpdateProgress ID="UpdateProgress1" >
<ProgressTemplate>
An update is in progress...
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdateProgress ID="UpdateProgress1" >
<ProgressTemplate>
An update is in progress...
</ProgressTemplate>
</asp:UpdateProgress>
Im folgenden Beispiel wird ein UpdateProgress-Steuerelement dargestellt, das den Aktualisierungsstatus für zwei UpdatePanel-Steuerelemente anzeigt.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
System.Threading.Thread.Sleep(3000)
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>UpdateProgress Example</title>
<style type="text/css">
#UpdatePanel1, #UpdatePanel2, #UpdateProgress1 {
border-right: gray 1px solid; border-top: gray 1px solid;
border-left: gray 1px solid; border-bottom: gray 1px solid;
}
#UpdatePanel1, #UpdatePanel2 {
width:200px; height:200px; position: relative;
float: left; margin-left: 10px; margin-top: 10px;
}
#UpdateProgress1 {
width: 400px; background-color: #FFC080;
bottom: 0%; left: 0px; position: absolute;
}
</style>
</head>
<body>
<form id="form1" >
<div>
<asp:ScriptManager ID="ScriptManager1" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button1" Text="Refresh Panel" OnClick="Button_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button2" Text="Refresh Panel" OnClick="Button_Click"/>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" >
<ProgressTemplate>
Update in progress...
</ProgressTemplate>
</asp:UpdateProgress>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
protected void Button_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>UpdateProgress Example</title>
<style type="text/css">
#UpdatePanel1, #UpdatePanel2, #UpdateProgress1 {
border-right: gray 1px solid; border-top: gray 1px solid;
border-left: gray 1px solid; border-bottom: gray 1px solid;
}
#UpdatePanel1, #UpdatePanel2 {
width:200px; height:200px; position: relative;
float: left; margin-left: 10px; margin-top: 10px;
}
#UpdateProgress1 {
width: 400px; background-color: #FFC080;
bottom: 0%; left: 0px; position: absolute;
}
</style>
</head>
<body>
<form id="form1" >
<div>
<asp:ScriptManager ID="ScriptManager1" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button1" Text="Refresh Panel" OnClick="Button_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button2" Text="Refresh Panel" OnClick="Button_Click"/>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" >
<ProgressTemplate>
Update in progress...
</ProgressTemplate>
</asp:UpdateProgress>
</div>
</form>
</body>
</html>
Das folgende Beispiel zeigt zwei UpdateProgress-Steuerelemente. Jedes Steuerelement zeigt den Aktualisierungsstatus für ein zugeordnetes UpdatePanel-Steuerelement an.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
System.Threading.Thread.Sleep(3000)
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>UpdateProgress Example</title>
<style type="text/css">
#UpdatePanel1, #UpdatePanel2 {
width:200px; height:200px; position: relative;
float: left; margin-left: 10px; margin-top: 10px;
border-right: gray 1px solid; border-top: gray 1px solid;
border-left: gray 1px solid; border-bottom: gray 1px solid;
}
#UpdateProgress1, #UpdateProgress2 {
width: 200px; background-color: #FFC080;
position: absolute; bottom: 0px; left: 0px;
}
</style>
</head>
<body>
<form id="form1" >
<div>
<asp:ScriptManager ID="ScriptManager1" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button1" Text="Refresh Panel" OnClick="Button_Click" />
<asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel1" >
<ProgressTemplate>
UpdatePanel1 updating...
</ProgressTemplate>
</asp:UpdateProgress>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button2" Text="Refresh Panel" OnClick="Button_Click"/>
<asp:UpdateProgress ID="UpdateProgress2" AssociatedUpdatePanelID="UpdatePanel2" >
<ProgressTemplate>
UpdatePanel2 updating...
</ProgressTemplate>
</asp:UpdateProgress>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
protected void Button_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>UpdateProgress Example</title>
<style type="text/css">
#UpdatePanel1, #UpdatePanel2 {
width:200px; height:200px; position: relative;
float: left; margin-left: 10px; margin-top: 10px;
border-right: gray 1px solid; border-top: gray 1px solid;
border-left: gray 1px solid; border-bottom: gray 1px solid;
}
#UpdateProgress1, #UpdateProgress2 {
width: 200px; background-color: #FFC080;
position: absolute; bottom: 0px; left: 0px;
}
</style>
</head>
<body>
<form id="form1" >
<div>
<asp:ScriptManager ID="ScriptManager1" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button1" Text="Refresh Panel" OnClick="Button_Click" />
<asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel1" >
<ProgressTemplate>
UpdatePanel1 updating...
</ProgressTemplate>
</asp:UpdateProgress>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button2" Text="Refresh Panel" OnClick="Button_Click"/>
<asp:UpdateProgress ID="UpdateProgress2" AssociatedUpdatePanelID="UpdatePanel2" >
<ProgressTemplate>
UpdatePanel2 updating...
</ProgressTemplate>
</asp:UpdateProgress>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
Im folgenden Beispiel wird dargestellt, wie dem <ProgressTemplate>-Element eine Schaltfläche hinzugefügt wird, auf die der Benutzer klicken kann, um das asynchrone Postback abzubrechen. Alle neuen Postbacks, die während eines anderen Postbacks ausgeführt werden, werden abgebrochen.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
System.Threading.Thread.Sleep(3000)
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" >
<title>UpdateProgress Example</title>
<style type="text/css">
#UpdatePanel1, #UpdatePanel2, #UpdateProgress1 {
border-right: gray 1px solid; border-top: gray 1px solid;
border-left: gray 1px solid; border-bottom: gray 1px solid;
}
#UpdatePanel1, #UpdatePanel2 {
width:200px; height:200px; position: relative;
float: left; margin-left: 10px; margin-top: 10px;
}
#UpdateProgress1 {
width: 400px; background-color: #FFC080;
bottom: 0%; left: 0px; position: absolute;
}
</style>
</head>
<body>
<form id="form1" >
<div>
<asp:ScriptManager ID="ScriptManager1" />
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
var postBackElement;
function InitializeRequest(sender, args) {
if (prm.get_isInAsyncPostBack())
{
args.set_cancel(true);
}
postBackElement = args.get_postBackElement();
if (postBackElement.id == 'ButtonTrigger')
{
$get('UpdateProgress1').style.display = "block";
}
}
function EndRequest (sender, args) {
if (postBackElement.id == 'ButtonTrigger')
{
$get('UpdateProgress1').style.display = "none";
}
}
function AbortPostBack() {
if (prm.get_isInAsyncPostBack()) {
prm.abortPostBack();
}
}
</script>
<asp:Button ID="ButtonTrigger" Text="Refresh Panel 1" OnClick="Button_Click" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
The trigger for this panel
causes the UpdateProgress to be displayed
even though the UpdateProgress is associated
with panel 2.
<br />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ButtonTrigger" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button2" Text="Refresh Panel" OnClick="Button_Click"/>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel2" >
<ProgressTemplate>
Update in progress...
<input type="button" value="stop" onclick="AbortPostBack()" />
</ProgressTemplate>
</asp:UpdateProgress>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
protected void Button_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" >
<title>UpdateProgress Example</title>
<style type="text/css">
#UpdatePanel1, #UpdatePanel2, #UpdateProgress1 {
border-right: gray 1px solid; border-top: gray 1px solid;
border-left: gray 1px solid; border-bottom: gray 1px solid;
}
#UpdatePanel1, #UpdatePanel2 {
width:200px; height:200px; position: relative;
float: left; margin-left: 10px; margin-top: 10px;
}
#UpdateProgress1 {
width: 400px; background-color: #FFC080;
bottom: 0%; left: 0px; position: absolute;
}
</style>
</head>
<body>
<form id="form1" >
<div>
<asp:ScriptManager ID="ScriptManager1" />
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
var postBackElement;
function InitializeRequest(sender, args) {
if (prm.get_isInAsyncPostBack())
{
args.set_cancel(true);
}
postBackElement = args.get_postBackElement();
if (postBackElement.id == 'ButtonTrigger')
{
$get('UpdateProgress1').style.display = "block";
}
}
function EndRequest (sender, args) {
if (postBackElement.id == 'ButtonTrigger')
{
$get('UpdateProgress1').style.display = "none";
}
}
function AbortPostBack() {
if (prm.get_isInAsyncPostBack()) {
prm.abortPostBack();
}
}
</script>
<asp:Button ID="ButtonTrigger" Text="Refresh Panel 1" OnClick="Button_Click" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
The trigger for this panel
causes the UpdateProgress to be displayed
even though the UpdateProgress is associated
with panel 2.
<br />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ButtonTrigger" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" >
<ContentTemplate>
<%=DateTime.Now.ToString() %> <br />
<asp:Button ID="Button2" Text="Refresh Panel" OnClick="Button_Click"/>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel2" >
<ProgressTemplate>
Update in progress...
<input type="button" value="stop" onclick="AbortPostBack()" />
</ProgressTemplate>
</asp:UpdateProgress>
</div>
</form>
</body>
</html>
Im vorherigen Beispiel ruft das onClick-Attribut eines HtmlButton-Steuerelements im <ProgressTemplate>-Element die AbortPostBack-JavaScript-Funktion auf. Weitere Informationen finden Sie unter der abortPostBack-Methode und der isInAsyncPostBack-Eigenschaft der PageRequestManager-Klasse.
Angeben des Inhaltslayouts
Wenn die DynamicLayout-Eigenschaft den Wert true hat, nimmt das UpdateProgress-Steuerelement anfänglich keinen Platz in der Seitenanzeige ein. Stattdessen wird die Seite dynamisch so geändert, dass der Inhalt des UpdateProgress-Steuerelements angezeigt wird, wenn er benötigt wird. Zur Unterstützung der dynamischen Anzeige wird das Steuerelement als <div>-Element gerendert, dessen display-Stileigenschaft anfänglich auf none festgelegt ist.
Wenn die DynamicLayout-Eigenschaft den Wert false hat, nimmt das UpdateProgress-Steuerelement Platz in der Seitenanzeige ein, auch wenn es nicht sichtbar ist. In diesem Fall wird für das <div>-Element des Steuerelements die display-Stileigenschaft auf block und visibility zunächst auf hidden festgelegt.
Platzieren von UpdateProgress-Steuerelementen auf der Seite
Sie können UpdateProgress-Steuerelemente innerhalb oder außerhalb von UpdatePanel-Steuerelementen platzieren. Ein UpdateProgress-Steuerelement wird angezeigt, wenn das UpdatePanel-Steuerelement, dem es zugeordnet ist, durch ein asynchrones Postback aktualisiert wird. Dies gilt auch dann, wenn das UpdateProgress-Steuerelement sich innerhalb eines anderen UpdatePanel-Steuerelements befindet.
Wenn sich ein UpdatePanel-Steuerelement innerhalb eines anderen UpdatePanel befindet, führt ein Postback, das aus dem untergeordneten Bereich stammt, dazu, dass alle dem untergeordneten Bereich zugeordneten UpdateProgress-Steuerelemente angezeigt werden. Außerdem werden alle dem übergeordneten Bereich zugeordneten UpdateProgress-Steuerelemente angezeigt. Wenn ein Postback aus einem direkt untergeordneten Steuerelement des übergeordneten Bereichs stammt, werden nur die UpdateProgress-Steuerelemente angezeigt, die dem übergeordneten Bereich zugeordnet sind. Dies entspricht der Logik beim Auslösen von Postbacks.
Festlegen der Anzeige von UpdateProgress-Steuerelementen
Sie können programmgesteuert bestimmen, wann ein UpdateProgress-Steuerelement angezeigt wird, indem Sie die JavaScript-Ereignisse beginRequest und endRequest der PageRequestManager-Klasse verwenden. Zeigen Sie im beginRequest-Ereignishandler das DOM-Element an, das das UpdateProgress-Steuerelement darstellt. Blenden Sie das Element im endRequest-Ereignishandler aus.
In folgenden Fällen müssen Sie ein Clientskript bereitstellen, um ein UpdateProgress-Steuerelement ein- und auszublenden:
Während eines Postbacks von einem Steuerelement, das als asynchroner Postbacktrigger für das UpdatePanel registriert wird, dem das UpdateProgress-Steuerelement jedoch nicht zugeordnet ist.
Während Postbacks von Steuerelementen, die mit der RegisterAsyncPostBackControl-Methode des ScriptManager-Steuerelements programmgesteuert als asynchrone Postback-Steuerelemente registriert werden. In diesem Fall kann das UpdateProgress-Steuerelement nicht automatisch feststellen, ob ein asynchrones Postback ausgelöst wurde.
Codebeispiele
Die folgenden Abschnitte enthalten Codebeispiele zum Erstellen und Verwenden von [T:System.Web.UI.]UpdateProgress-Steuerelementen.
Lernprogramme
Klassenreferenz
In der folgenden Tabelle sind die wichtigsten Klassen für die Arbeit mit der [T:System.Web.UI.]UpdateProgress-Klasse aufgelistet.
Klasse |
Beschreibung |
---|---|
Stellt visuelles Feedback im Browser bereit, wenn der Inhalt von UpdatePanel-Steuerelementen aktualisiert wird. |
|
Gibt Teile einer Webseite an, die an Teilaktualisierungen von Seiten teilnehmen können. |
|
Verwaltet das Teilrendering von Seiten. Das ScriptManager-Steuerelement registriert Skriptkomponenten, die an den Browser gesendet werden sollen, und überschreibt das Seitenrendering, sodass nur bestimmte Bereiche der Seite gerendert werden. |
|
Koordiniert das Teilrendering von Seiten im Browser. Die PageRequestManager-Klasse tauscht Informationen mit dem Server asynchron aus und macht Ereignisse sowie Methoden für benutzerdefinierte Clientskripts verfügbar. |
Weitere Themen
Übersicht über den Lebenszyklus von ASP.NET-Seiten
Siehe auch
Aufgaben
UpdatePanel-Steuerelement – Einführung
UpdateProgress-Steuerelement – Einführung
Programmieren von UpdateProgress-Steuerelementen in Clientskript