Freigeben über


Übersicht über das UpdatePanel-Steuerelement

Aktualisiert: November 2007

Mithilfe von UpdatePanel-Steuerelementen in ASP.NET können Sie clientorientierte Webanwendungen mit großem Funktionsumfang erstellen. Mit UpdatePanel-Steuerelementen können Sie ausgewählte Teile der Seite aktualisieren, statt die gesamte Seite mit einem Postback zu aktualisieren. Dies wird als eine Teilaktualisierung von Seiten bezeichnet. Eine ASP.NET-Webseite, die ein ScriptManager-Steuerelement und mindestens ein UpdatePanel-Steuerelement enthält, kann ohne benutzerdefiniertes Clientskript automatisch Teilaktualisierungen von Seiten nutzen.

Dieses Thema enthält Informationen über:

  • Szenarien

  • Hintergrund

  • Codebeispiele

  • Klassenreferenz

Szenarien

Das UpdatePanel-Steuerelement ist ein Serversteuerelement, das Sie bei der Entwicklung von Webseiten mit komplexem Clientverhalten unterstützt. Dadurch bieten Webseiten dem Endbenutzer mehr Interaktionsmöglichkeiten. Das Schreiben von Code, der die Koordinierung zwischen Server und Client übernimmt, sodass nur bestimmte Teile einer Webseite aktualisiert werden, erfordert in der Regel gründliche Kenntnisse über ECMAScript (JavaScript). Wenn Sie jedoch das UpdatePanel-Steuerelement verwenden, können für eine Webseite Teilaktualisierungen von Seiten ausgeführt werden, ohne Clientskript schreiben zu müssen. Bei Bedarf können Sie ein benutzerdefiniertes Clientskript hinzufügen, um die Benutzerfreundlichkeit des Clients zu verbessern. Wenn Sie ein UpdatePanel-Steuerelement verwenden, ist das Seitenverhalten browserunabhängig, und möglicherweise verringert sich auch die Menge der zwischen Client und Server übertragenen Daten.

Hintergrund

UpdatePanel-Steuerelemente geben die Bereiche einer Seite an, die aktualisiert werden können, ohne dass die gesamte Seite aktualisiert wird. Dieser Prozess wird durch das ScriptManager-Serversteuerelement und die PageRequestManager-Clientklasse koordiniert. Wenn Teilaktualisierungen von Seiten aktiviert sind, können Steuerelemente Daten asynchron an den Server senden. Ein asynchrones Postback verhält sich insofern wie ein normales Postback, als die resultierende Serverseite den vollständigen Seiten- und Steuerelementlebenszyklus ausführt. Bei einem asynchronen Postback sind Seitenaktualisierungen jedoch auf die Bereiche der Seite beschränkt, die von UpdatePanel-Steuerelementen eingeschlossen und für die Aktualisierung gekennzeichnet sind. Der Server sendet HTML-Markup nur für die betreffenden Elemente an den Browser. Im Browser führt die PageRequestManager-Clientklasse DOM (Document Object Model)-Bearbeitungen aus, um das vorhandene HTML-Markup durch aktualisiertes Markup zu ersetzen.

Hinweis:

Wenn Sie asynchrone Postbacks oder das XMLHTTPRequest-Objekt verwenden, kann ein Postback-Fehler auftreten, wenn die URL ein Doppelbytezeichen enthält. Sie können dieses Problem lösen, indem Sie ein <base href="URL"/>-Element in das head-Element der Seite aufnehmen. Dabei wird das href-Attribut auf die URL-codierte Zeichenfolge festgelegt, die auf die Seite verweist. Sie können dieses in Servercode dynamisch hinzugefügte Element hinzufügen.

Die folgende Abbildung zeigt eine Seite, die zum ersten Mal geladen wird, und ein nachfolgendes asynchrones Postback, das den Inhalt eines UpdatePanel-Steuerelements aktualisiert.

Übersicht über das Teilrendering von Seiten

Aktivieren von Teilaktualisierungen von Seiten

Das UpdatePanel-Steuerelement benötigt ein ScriptManager-Steuerelement auf der Webseite. Teilaktualisierungen von Seiten sind standardmäßig aktiviert, da die EnablePartialRendering-Eigenschaft des ScriptManager-Steuerelements in der Standardeinstellung den Wert true hat.

Das folgende Beispiel zeigt Markup, das ein ScriptManager-Steuerelement und ein UpdatePanel-Steuerelement auf einer Seite definiert. Das UpdatePanel-Steuerelement enthält ein Button-Steuerelement, das den Inhalt innerhalb des Bereichs aktualisiert, wenn Sie darauf klicken. Standardmäßig hat die ChildrenAsTriggers-Eigenschaft den Wert true. Deshalb fungiert das Button-Steuerelement als asynchrones Postback-Steuerelement.

<asp:ScriptManager ID="ScriptManager" 
                    />
<asp:UpdatePanel ID="UpdatePanel1" 
                 UpdateMode="Conditional"
                 >
    <ContentTemplate>
       <fieldset>
       <legend>UpdatePanel content</legend>
        <!-- Other content in the panel. -->
        <%=DateTime.Now.ToString() %>
        <br />
        <asp:Button ID="Button1" 
                    Text="Refresh Panel" 
                     />
        </fieldset>
    </ContentTemplate>
</asp:UpdatePanel>
<asp:ScriptManager ID="ScriptManager" 
                    />
<asp:UpdatePanel ID="UpdatePanel1" 
                 UpdateMode="Conditional"
                 >
    <ContentTemplate>
       <fieldset>
       <legend>UpdatePanel content</legend>
        <!-- Other content in the panel. -->
        <%=DateTime.Now.ToString() %>
        <br />
        <asp:Button ID="Button1" 
                    Text="Refresh Panel" 
                     />
        </fieldset>
    </ContentTemplate>
</asp:UpdatePanel>

Festlegen des Inhalts für das UpdatePanel-Steuerelement

Inhalt wird einem UpdatePanel-Steuerelement deklarativ oder im Designer mithilfe der ContentTemplate-Eigenschaft hinzugefügt. In Markup wird diese Eigenschaft als ContentTemplate-Element verfügbar gemacht. Wenn Sie Inhalt programmgesteuert hinzufügen möchten, verwenden Sie die ContentTemplateContainer-Eigenschaft.

Wenn eine Seite mit einem oder mehreren UpdatePanel-Steuerelementen erstmalig gerendert wird, wird der gesamte Inhalt der UpdatePanel-Steuerelemente gerendert und an den Browser gesendet. Bei späteren asynchronen Postbacks kann der Inhalt einzelner UpdatePanel-Steuerelemente aktualisiert werden. Die Aktualisierungen hängen von den Bereichseinstellungen, dem Element, durch welches das Postback verursacht wurde, und vom jeweiligen Code des Bereichs ab.

Angeben von UpdatePanel-Triggern

Standardmäßig verursacht jedes Postback-Steuerelement innerhalb eines UpdatePanel-Steuerelements ein asynchrones Postback, wodurch der Inhalt des Bereichs aktualisiert wird. Sie können jedoch auch andere Steuerelemente auf der Seite so konfigurieren, dass ein UpdatePanel-Steuerelement aktualisiert wird. Dazu definieren Sie einen Trigger für das UpdatePanel-Steuerelement. Ein Trigger ist eine Bindung, die angibt, welches Postback-Steuerelement und Ereignis die Aktualisierung eines Bereichs bewirken. Wenn das angegebene Ereignis des Triggersteuerelements ausgelöst wird (z. B. das Click-Ereignis einer Schaltfläche), wird der Aktualisierungsbereich aktualisiert.

Das folgende Beispiel zeigt, wie ein Trigger für ein UpdatePanel-Steuerelement angegeben wird.

<asp:Button ID="Button1" 
            Text="Refresh Panel"
             />
<asp:ScriptManager ID="ScriptManager1" 
                    />
<asp:UpdatePanel ID="UpdatePanel1" 
                 UpdateMode="Conditional"
                 >
                 <Triggers>
                   <asp:AsyncPostBackTrigger ControlID="Button1" />
                 </Triggers>
                 <ContentTemplate>
                 <fieldset>
                 <legend>UpdatePanel content</legend>
                 <%=DateTime.Now.ToString() %>
                 </fieldset>
                 </ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="Button1" 
            Text="Refresh Panel"
             />
<asp:ScriptManager ID="ScriptManager1" 
                    />
<asp:UpdatePanel ID="UpdatePanel1" 
                 UpdateMode="Conditional"
                 >
                 <Triggers>
                   <asp:AsyncPostBackTrigger ControlID="Button1" />
                 </Triggers>
                 <ContentTemplate>
                 <fieldset>
                 <legend>UpdatePanel content</legend>
                 <%=DateTime.Now.ToString() %>
                 </fieldset>
                 </ContentTemplate>
</asp:UpdatePanel>

Der Trigger wird definiert, indem das asp:AsyncPostBackTrigger-Element im Triggers-Element des UpdatePanel-Steuerelements verwendet wird. (Wenn Sie die Seite in Visual Studio bearbeiten, können Sie Trigger mithilfe des Dialogfelds UpdatePanelTrigger-Auflistungs-Editor erstellen.)

Das Steuerelementereignis eines Triggers ist optional. Wenn Sie kein Ereignis angeben, ist das Triggerereignis das Standardereignis des Steuerelements. Für das Button-Steuerelement ist beispielsweise das Click-Ereignis das Standardereignis.

Aktualisierung von UpdatePanel-Steuerelementen

Die folgende Liste beschreibt die Eigenschaftseinstellungen des UpdatePanel-Steuerelements, die bestimmen, wann der Inhalt eines Bereichs während eines Teilrenderings von Seiten aktualisiert wird.

  • Wenn die UpdateMode-Eigenschaft auf Always festgelegt ist, wird der Inhalt des UpdatePanel-Steuerelements bei jedem Postback aktualisiert, das an beliebiger Stelle auf der Seite auftritt. Dies umfasst asynchrone Postbacks von Steuerelementen innerhalb anderer UpdatePanel-Steuerelemente sowie Postbacks von Steuerelementen, die sich nicht innerhalb von UpdatePanel-Steuerelementen befinden.

  • Wenn die UpdateMode-Eigenschaft auf Conditional festgelegt ist, wird der Inhalt des UpdatePanel-Steuerelements aktualisiert, wenn eine der folgenden Bedingungen zutrifft:

    • Wenn das Postback durch einen Trigger für das betreffende UpdatePanel-Steuerelement verursacht wird.

    • Wenn Sie die Update-Methode des UpdatePanel-Steuerelements explizit aufrufen.

    • Wenn das UpdatePanel-Steuerelement in einem anderen UpdatePanel-Steuerelement geschachtelt ist und der übergeordnete Bereich aktualisiert wird.

    • Wenn die ChildrenAsTriggers-Eigenschaft auf true festgelegt ist und ein untergeordnetes Steuerelement des UpdatePanel-Steuerelements ein Postback bewirkt. Untergeordnete Steuerelemente von geschachtelten UpdatePanel-Steuerelementen bewirken keine Aktualisierung des äußeren UpdatePanel-Steuerelements, es sei denn, sie sind explizit als Trigger für den übergeordneten Bereich definiert.

Wenn die ChildrenAsTriggers-Eigenschaft auf false festgelegt ist und die UpdateMode-Eigenschaft auf Always, wird eine Ausnahme ausgelöst. Die ChildrenAsTriggers-Eigenschaft soll nur verwendet werden, wenn die UpdateMode-Eigenschaft auf Conditional festgelegt ist.

Verwenden von UpdatePanel-Steuerelementen auf Masterseiten

Wenn Sie ein UpdatePanel-Steuerelement auf einer Masterseite verwenden möchten, müssen Sie entscheiden, wie das ScriptManager-Steuerelement eingefügt werden soll. Wenn Sie das ScriptManager-Steuerelement auf der Masterseite einfügen, kann es für alle Inhaltsseiten als ScriptManager-Steuerelement fungieren. (Wenn Sie Skripts oder Dienste auf einer Inhaltsseite deklarativ registrieren möchten, können Sie der betreffenden Inhaltsseite ein ScriptManagerProxy-Steuerelement hinzufügen.)

Falls die Masterseite das ScriptManager-Steuerelement nicht enthält, können Sie das ScriptManager-Steuerelement auf jeder Inhaltsseite einfügen, die ein UpdatePanel-Steuerelement enthält. Die Entwurfsentscheidung hängt davon ab, wie Clientskripts in der Anwendung verwaltet werden sollen. Weitere Informationen zum Verwalten von Clientskripts finden Sie unter Übersicht über das ScriptManager-Steuerelement. Weitere Informationen zu Masterseiten finden Sie unter Übersicht über ASP.NET-Masterseiten.

In einigen Fällen befindet sich das ScriptManager-Steuerelement auf der Masterseite, sodass Sie für eine Inhaltsseite keine Teilrenderingfähigkeiten benötigen. In solchen Fällen müssen Sie die EnablePartialRendering-Eigenschaft des ScriptManager-Steuerelements für die betreffende Inhaltsseite programmgesteuert auf false festlegen.

Das folgende Beispiel zeigt Markup für ein ScriptManager-Steuerelement auf der Masterseite und ein UpdatePanel-Steuerelement auf einer Inhaltsseite. In diesem Beispiel wird auf der Masterseite eine Eigenschaft mit dem Namen LastUpdate definiert, auf die im UpdatePanel-Steuerelement verwiesen wird.

<%@ Master Language="VB" %>
<!DOCTYPE html PUBLIC "-'W3C'DTD XHTML 1.0 Transitional'EN"
 "http:'www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script >

    Public Property LastUpdate() As DateTime
        Get
            If ViewState("LastUpdate") Is Nothing Then
                Return DateTime.Now
            Else : Return ViewState("LastUpdate")
            End If
        End Get
        Set(ByVal value As DateTime)
            ViewState("LastUpdate") = value
        End Set
    End Property

    Protected Sub MasterButton2_Click(ByVal Sender As Object, ByVal E As EventArgs)
        LastUpdate = DateTime.Now
        Dim up1 As UpdatePanel
        up1 = ContentPlaceHolder1.FindControl("UpdatePanel1")
        up1.Update()

    End Sub
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        ScriptManager1.RegisterAsyncPostBackControl(Button2)
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title>ScriptManager in Master Page Example</title>
</head>
<body>
    <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager1"  />
            <asp:Panel ID="MasterPanel1"  GroupingText="Master Page">
               <asp:Button ID="Button1"  Text="Full Page Refresh" />
               <asp:Button ID="Button2"  Text="Refresh Panel" OnClick="MasterButton2_Click" />
            </asp:Panel>
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" >
            </asp:ContentPlaceHolder>
        </div>
    </form>
</body>
</html>
<%@ Master Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script >

    public DateTime LastUpdate
    {
        get
        {
            return (DateTime)(ViewState["LastUpdate"] ?? DateTime.Now);
        }
        set
        {
            ViewState["LastUpdate"] = value;
        }
    }


    protected void MasterButton2_Click(object sender, EventArgs e)
    {
        LastUpdate = DateTime.Now;
        ((UpdatePanel)ContentPlaceHolder1.FindControl("UpdatePanel1")).Update();

    }

    protected void Page_Load(object sender, EventArgs e)
    {
        ScriptManager1.RegisterAsyncPostBackControl(Button2);
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title>ScriptManager in Master Page Example</title>
</head>
<body>
    <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager1"  />
            <asp:Panel ID="MasterPanel1"  GroupingText="Master Page">
               <asp:Button ID="Button1"  Text="Full Page Refresh" />
               <asp:Button ID="Button2"  Text="Refresh Panel" OnClick="MasterButton2_Click" />
            </asp:Panel>
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" >
            </asp:ContentPlaceHolder>
        </div>
    </form>
</body>
</html>
<%@ Page Language="VB" MasterPageFile="MasterVB.master"
    Title="ScriptManager in Content Page" %>

<%@ MasterType VirtualPath="MasterVB.master" %>

<script >

    Protected Sub Button3_Click(ByVal Sender As Object, ByVal E As EventArgs)
       Master.LastUpdate = DateTime.Now
    End Sub

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
    runat="Server">
    </asp:ScriptManagerProxy>
    <asp:Panel ID="Panel2"
               GroupingText="ContentPage"
                >
        <asp:UpdatePanel ID="UpdatePanel1" 
                         UpdateMode="Conditional" 
                         >
            <ContentTemplate>
                <p>
                    Last updated: <strong>
                        <%= Master.LastUpdate.ToString() %>
                    </strong>
                </p>
                <asp:Button ID="Button3"
                            Text="Refresh Panel"
                            OnClick="Button3_Click"
                              />
            </ContentTemplate>
        </asp:UpdatePanel>
    </asp:Panel>
</asp:Content>
<%@ Page Language="C#" MasterPageFile="MasterCS.master"
    Title="ScriptManager in Content Page" %>

<%@ MasterType VirtualPath="MasterCS.master" %>

<script >

    protected void Button3_Click(object sender, EventArgs e)
    {
        Master.LastUpdate = DateTime.Now;
    }

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
    runat="Server">
    <asp:Panel ID="Panel2"
               GroupingText="ContentPage"
                >
        <asp:UpdatePanel ID="UpdatePanel1" 
                         UpdateMode="Conditional" 
                         >
            <ContentTemplate>
                <p>
                    Last updated: <strong>
                        <%= Master.LastUpdate.ToString() %>
                    </strong>
                </p>
                <asp:Button ID="Button3"
                            Text="Refresh Panel"
                            OnClick="Button3_Click"
                              />
            </ContentTemplate>
        </asp:UpdatePanel>
    </asp:Panel>
</asp:Content>

Verwenden geschachtelter UpdatePanel-Steuerelemente

UpdatePanel-Steuerelemente können geschachtelt werden. Wenn der übergeordnete Bereich aktualisiert wird, werden alle geschachtelten Bereiche ebenfalls aktualisiert.

Das folgende Beispiel zeigt Markup, das ein UpdatePanel-Steuerelement innerhalb eines anderen UpdatePanel-Steuerelements definiert. Eine Schaltfläche im übergeordneten Bereich löst eine Aktualisierung des Inhalts im übergeordneten und im untergeordneten Bereich aus. Mit der Schaltfläche im untergeordneten Bereich wird eine Aktualisierung nur des untergeordneten Bereichs ausgelöst.

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script >
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title>UpdatePanelUpdateMode Example</title>
    <style type="text/css">
    div.NestedPanel
    {
      position: relative;
      margin: 2% 5% 2% 5%;
    }
    </style>
</head>
<body>
    <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager" 
                                />
            <asp:UpdatePanel ID="OuterPanel" 
                             UpdateMode="Conditional" 
                             >
                <ContentTemplate>
                    <div>
                        <fieldset>
                            <legend>Outer Panel </legend>
                            <br />
                            <asp:Button ID="OPButton1" 
                                        Text="Outer Panel Button" 
                                         />
                            <br />
                            Last updated on
                            <%= DateTime.Now.ToString() %>
                            <br />
                            <br />
                            <asp:UpdatePanel ID="NestedPanel1" 
                                               UpdateMode="Conditional"
                                               >
                                <ContentTemplate>
                                    <div class="NestedPanel">
                                        <fieldset>
                                            <legend>Nested Panel 1</legend>
                                            <br />
                                            Last updated on
                                            <%= DateTime.Now.ToString() %>
                                            <br />
                                            <asp:Button ID="NPButton1"
                                                        Text="Nested Panel 1 Button" 
                                                         />
                                        </fieldset>
                                    </div>
                                </ContentTemplate>
                            </asp:UpdatePanel>
                        </fieldset>
                    </div>
                </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 >
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title>UpdatePanelUpdateMode Example</title>
    <style type="text/css">
    div.NestedPanel
    {
      position: relative;
      margin: 2% 5% 2% 5%;
    }
    </style>
</head>
<body>
    <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager" 
                                />
            <asp:UpdatePanel ID="OuterPanel" 
                             UpdateMode="Conditional" 
                             >
                <ContentTemplate>
                    <div>
                        <fieldset>
                            <legend>Outer Panel </legend>
                            <br />
                            <asp:Button ID="OPButton1" 
                                        Text="Outer Panel Button" 
                                         />
                            <br />
                            Last updated on
                            <%= DateTime.Now.ToString() %>
                            <br />
                            <br />
                            <asp:UpdatePanel ID="NestedPanel1" 
                                               UpdateMode="Conditional"
                                               >
                                <ContentTemplate>
                                    <div class="NestedPanel">
                                        <fieldset>
                                            <legend>Nested Panel 1</legend>
                                            <br />
                                            Last updated on
                                            <%= DateTime.Now.ToString() %>
                                            <br />
                                            <asp:Button ID="NPButton1"
                                                        Text="Nested Panel 1 Button" 
                                                         />
                                        </fieldset>
                                    </div>
                                </ContentTemplate>
                            </asp:UpdatePanel>
                        </fieldset>
                    </div>
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
    </form>
</body>
</html>

Das folgende Beispiel zeigt ein geschachteltes UpdatePanel-Steuerelement mit einem GridView-Steuerelement. Das GridView-Steuerelement befindet sich innerhalb eines UpdatePanel-Steuerelements, und jede GridView-Zeile enthält ein geschachteltes GridView-Steuerelement innerhalb eines anderen UpdatePanel-Steuerelements.

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Browse Departments</title>
    <script >
        Protected Sub DepartmentsGridView_RowDataBound(sender As object, e As GridViewRowEventArgs)
            If e.Row.RowType = DataControlRowType.DataRow Then
                Dim s As SqlDataSource = CType(e.Row.FindControl("EmployeesDataSource"), SqlDataSource)
                Dim r As System.Data.DataRowView = CType(e.Row.DataItem, System.Data.DataRowView)
                s.SelectParameters("DepartmentID").DefaultValue = r("DepartmentID").ToString()
            End If
        End Sub
    </script>
</head>
<body>
    <form id="form1" >
    <div>
        <asp:ScriptManager  ID="ScriptManager1" EnablePartialRendering="true" />
        <asp:UpdatePanel ID="UpdatePanel2"  UpdateMode="Conditional">
            <ContentTemplate>
        <asp:GridView ID="DepartmentsGridView"  AllowPaging="True" AllowSorting="True"
            AutoGenerateColumns="False" CellPadding="4" DataSourceID="DepartmentDataSource"
            ForeColor="#333333" GridLines="None" PageSize="3" OnRowDataBound="DepartmentsGridView_RowDataBound">
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <Columns>
                <asp:BoundField DataField="GroupName" HeaderText="Division" SortExpression="GroupName" >
                    <ItemStyle Width="200px" />
                </asp:BoundField>
                <asp:BoundField DataField="Name" HeaderText="Department Name" SortExpression="Name" >
                    <ItemStyle Width="160px" />
                </asp:BoundField>
                <asp:TemplateField HeaderText="Employees">
                    <ItemTemplate>
                        <asp:UpdatePanel ID="UpdatePanel1"  UpdateMode="Conditional">
                            <ContentTemplate>
                                <asp:GridView ID="EmployeesGridView"  AllowPaging="True" AllowSorting="True"
                                    AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None"
                                    BorderWidth="1px" CellPadding="3" DataSourceID="EmployeesDataSource" GridLines="Vertical"
                                    PageSize="4">
                                    <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
                                    <Columns>
                                        <asp:BoundField DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" >
                                            <ItemStyle Width="80px" />
                                        </asp:BoundField>
                                        <asp:BoundField DataField="LastName" HeaderText="Last Name" SortExpression="LastName" >
                                            <ItemStyle Width="160px" />
                                        </asp:BoundField>
                                    </Columns>
                                    <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
                                    <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
                                    <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                                    <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
                                    <AlternatingRowStyle BackColor="Gainsboro" />
                                </asp:GridView>
                                <asp:Label  ID="InnerTimeLabel"><%=DateTime.Now %></asp:Label>
                                <asp:SqlDataSource ID="EmployeesDataSource"  ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
                                    SelectCommand="SELECT HumanResources.EmployeeDepartmentHistory.DepartmentID, 
                                                          HumanResources.vEmployee.EmployeeID, 
                                                          HumanResources.vEmployee.FirstName, 
                                                          HumanResources.vEmployee.LastName 
                                                   FROM HumanResources.EmployeeDepartmentHistory
                                                   INNER JOIN HumanResources.vEmployee 
                                                     ON HumanResources.EmployeeDepartmentHistory.EmployeeID = HumanResources.vEmployee.EmployeeID
                                                   WHERE HumanResources.EmployeeDepartmentHistory.DepartmentID = @DepartmentID
                                                   ORDER BY HumanResources.vEmployee.LastName ASC, HumanResources.vEmployee.FirstName ASC">
                                    <SelectParameters>
                                      <asp:Parameter Name="DepartmentID" DefaultValue="0" Type="int32" />
                                    </SelectParameters>
                                </asp:SqlDataSource>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                    </ItemTemplate>
                    <ItemStyle Height="170px" Width="260px" />
                </asp:TemplateField>
            </Columns>
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" VerticalAlign="Top" />
            <EditRowStyle BackColor="#999999" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" HorizontalAlign="Left" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" VerticalAlign="Top" />
        </asp:GridView>
        <asp:Label  ID="OuterTimeLabel"><%=DateTime.Now %></asp:Label>
            </ContentTemplate>
        </asp:UpdatePanel>
        &nbsp;
        <asp:SqlDataSource ID="DepartmentDataSource"  ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
            SelectCommand="SELECT DepartmentID, Name, GroupName FROM HumanResources.Department ORDER BY Name">
        </asp:SqlDataSource>

    </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">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Browse Departments</title>
    <script >
        protected void DepartmentsGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                SqlDataSource s = (SqlDataSource)e.Row.FindControl("EmployeesDataSource");
                System.Data.DataRowView r = (System.Data.DataRowView)e.Row.DataItem;
                s.SelectParameters["DepartmentID"].DefaultValue = r["DepartmentID"].ToString();
            }
        }
    </script>
</head>
<body>
    <form id="form1" >
    <div>
        <asp:ScriptManager  ID="ScriptManager1" EnablePartialRendering="true" />
        <asp:UpdatePanel ID="UpdatePanel2"  UpdateMode="Conditional">
            <ContentTemplate>
        <asp:GridView ID="DepartmentsGridView"  AllowPaging="True" AllowSorting="True"
            AutoGenerateColumns="False" CellPadding="4" DataSourceID="DepartmentDataSource"
            ForeColor="#333333" GridLines="None" PageSize="3" OnRowDataBound="DepartmentsGridView_RowDataBound">
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <Columns>
                <asp:BoundField DataField="GroupName" HeaderText="Division" SortExpression="GroupName" >
                    <ItemStyle Width="200px" />
                </asp:BoundField>
                <asp:BoundField DataField="Name" HeaderText="Department Name" SortExpression="Name" >
                    <ItemStyle Width="160px" />
                </asp:BoundField>
                <asp:TemplateField HeaderText="Employees">
                    <ItemTemplate>
                        <asp:UpdatePanel ID="UpdatePanel1"  UpdateMode="Conditional">
                            <ContentTemplate>
                                <asp:GridView ID="EmployeesGridView"  AllowPaging="True" AllowSorting="True"
                                    AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None"
                                    BorderWidth="1px" CellPadding="3" DataSourceID="EmployeesDataSource" GridLines="Vertical"
                                    PageSize="4">
                                    <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
                                    <Columns>
                                        <asp:BoundField DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" >
                                            <ItemStyle Width="80px" />
                                        </asp:BoundField>
                                        <asp:BoundField DataField="LastName" HeaderText="Last Name" SortExpression="LastName" >
                                            <ItemStyle Width="160px" />
                                        </asp:BoundField>
                                    </Columns>
                                    <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
                                    <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
                                    <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                                    <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
                                    <AlternatingRowStyle BackColor="Gainsboro" />
                                </asp:GridView>
                                <asp:Label  ID="InnerTimeLabel"><%=DateTime.Now %></asp:Label>
                                <asp:SqlDataSource ID="EmployeesDataSource"  ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
                                    SelectCommand="SELECT HumanResources.EmployeeDepartmentHistory.DepartmentID, 
                                                          HumanResources.vEmployee.EmployeeID, 
                                                          HumanResources.vEmployee.FirstName, 
                                                          HumanResources.vEmployee.LastName 
                                                   FROM HumanResources.EmployeeDepartmentHistory
                                                   INNER JOIN HumanResources.vEmployee 
                                                     ON HumanResources.EmployeeDepartmentHistory.EmployeeID = HumanResources.vEmployee.EmployeeID
                                                   WHERE HumanResources.EmployeeDepartmentHistory.DepartmentID = @DepartmentID
                                                   ORDER BY HumanResources.vEmployee.LastName ASC, HumanResources.vEmployee.FirstName ASC">
                                    <SelectParameters>
                                      <asp:Parameter Name="DepartmentID" DefaultValue="0" Type="int32" />
                                    </SelectParameters>
                                </asp:SqlDataSource>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                    </ItemTemplate>
                    <ItemStyle Height="170px" Width="260px" />
                </asp:TemplateField>
            </Columns>
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" VerticalAlign="Top" />
            <EditRowStyle BackColor="#999999" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" HorizontalAlign="Left" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" VerticalAlign="Top" />
        </asp:GridView>
        <asp:Label  ID="OuterTimeLabel"><%=DateTime.Now %></asp:Label>
            </ContentTemplate>
        </asp:UpdatePanel>
        &nbsp;
        <asp:SqlDataSource ID="DepartmentDataSource"  ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
            SelectCommand="SELECT DepartmentID, Name, GroupName FROM HumanResources.Department ORDER BY Name">
        </asp:SqlDataSource>

    </div>
    </form>
</body>
</html>

Wenn ein inneres GridView-Steuerelement eine neue Seite mit Datensätzen anzeigt, werden der äußere Bereich und die Bereiche in den anderen Zeilen des äußeren GridView-Steuerelements nicht aktualisiert. Wenn das äußere GridView-Steuerelement eine neue Seite mit Datensätzen anzeigt, werden der äußere Bereich und die geschachtelten Bereiche aktualisiert.

Programmgesteuertes Aktualisieren eines UpdatePanel

Das folgende Beispiel zeigt, wie ein UpdatePanel-Steuerelement programmgesteuert aktualisiert wird. In diesem Beispiel registriert eine Seite ein Steuerelement als Trigger, indem die RegisterAsyncPostBackControl-Methode aufgerufen wird. Der Code aktualisiert das UpdatePanel-Steuerelement programmgesteuert, indem die Update-Methode aufgerufen wird.

<%@ 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 Property AnsweredQuestions As SortedList
        Get
            If ViewState("AnsweredQuestions") IsNot Nothing Then
                Return CType(ViewState("AnsweredQuestions"), SortedList)
            Else 
                Return New SortedList()
            End If
        End Get
        Set
          ViewState("AnsweredQuestions") = value
        End Set
    End Property

    Protected Sub Page_Load()
        ScriptManager1.RegisterAsyncPostBackControl(SurveyDataList)
    End Sub

    Protected Sub ChoicesRadioButtonList_SelectedIndexChanged(sender As Object, e As EventArgs)
        Dim answers As SortedList = Me.AnsweredQuestions
        Dim r As RadioButtonList = CType(sender, RadioButtonList)
        answers(r.ToolTip) = r.SelectedValue
        Me.AnsweredQuestions = answers

        ResultsList.DataSource = Me.AnsweredQuestions
        ResultsList.DataBind()

        If Me.AnsweredQuestions.Count = SurveyDataList.Items.Count Then _
            SubmitButton.Visible = True

        UpdatePanel1.Update()
    End Sub

    Protected Sub SubmitButton_Click(sender As Object, e As EventArgs)
        ' Submit responses.
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title>Registering Controls as Async Postback Controls</title>
    <style type="text/css">
    .AnswerFloatPanelStyle {
    background-color: bisque;
    position: absolute;
    right: 10px;
    height: 130px;
    width: 150px;
    border-right: silver thin solid; border-top: silver thin solid; 
    border-left: silver thin solid; border-bottom: silver thin solid;    
    }
    </style>
</head>
<body>
    <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager1"  />
            <div id="AnswerFloatPanel" class="AnswerFloatPanelStyle" >
                <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" >
                    <ContentTemplate>
                        Completed Questions:
                        <asp:DataList ID="ResultsList" >
                            <ItemTemplate>
                                <asp:Label ID="ResultQuestion"  Text='<%# Eval("Key") %>' />
                                ::
                                <asp:Label ID="ResultAnswer"  Text='<%# Eval("Value") %>' />
                            </ItemTemplate>
                        </asp:DataList>
                        <p style="text-align: right">
                            <asp:Button ID="SubmitButton" Text="Submit"  Visible="false"
                                OnClick="SubmitButton_Click" />
                        </p>
                        <asp:Label ID="Message" runat="Server" />
                    </ContentTemplate>
                </asp:UpdatePanel>
            </div>

            <asp:XmlDataSource ID="SurveyDataSource" 
                                
                               XPath="/Questions/Question"
                               DataFile="~/App_Data/SurveyQuestions.xml"/>
            <asp:DataList
                ID="SurveyDataList"
                DataSourceID="SurveyDataSource"
                >

                <ItemTemplate>
                  <table cellpadding="2" cellspacing="2">
                    <tr>
                      <td valign="top">
                        <asp:Label id="QuestionLabel" Text='<%# XPath("@Title")%>'  />
                      </td>
                    </tr>
                    <tr><td>
                      <asp:RadioButtonList ID="ChoicesRadioButtonList"  
                        DataSource='<%#XPathSelect("Choices/Choice") %>'
                        DataTextField="InnerText" DataValueField="InnerText" 
                        AutoPostBack="True"
                        ToolTip='<%# "Question" + XPath("@ID") %>'
                        OnSelectedIndexChanged="ChoicesRadioButtonList_SelectedIndexChanged"/>
                    </td></tr>
                  </table>
                  <hr />
                </ItemTemplate>
            </asp:DataList>
        </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 SortedList AnsweredQuestions
    {
        get { return (SortedList)(ViewState["AnsweredQuestions"] ?? new SortedList()); }
        set { ViewState["AnsweredQuestions"] = value; }
    }

    protected void Page_Load()
    {
        ScriptManager1.RegisterAsyncPostBackControl(SurveyDataList);
    }

    protected void ChoicesRadioButtonList_SelectedIndexChanged(object sender, EventArgs e)
    {
        SortedList answers = this.AnsweredQuestions;
        RadioButtonList r = (RadioButtonList)sender;
        answers[r.ToolTip] = r.SelectedValue;
        this.AnsweredQuestions = answers;

        ResultsList.DataSource = this.AnsweredQuestions;
        ResultsList.DataBind();

        if (this.AnsweredQuestions.Count == SurveyDataList.Items.Count)
            SubmitButton.Visible = true;

        UpdatePanel1.Update();
    }

    protected void SubmitButton_Click(object sender, EventArgs e)
    {
        // Submit responses.
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title>Registering Controls as Async Postback Controls</title>
    <style type="text/css">
    .AnswerFloatPanelStyle {
    background-color: bisque;
    position: absolute;
    right: 10px;
    height: 130px;
    width: 150px;
    border-right: silver thin solid; border-top: silver thin solid; 
    border-left: silver thin solid; border-bottom: silver thin solid;    
    }
    </style>
</head>
<body>
    <form id="form1" >
        <div>
            <asp:ScriptManager ID="ScriptManager1"  />
            <div id="AnswerFloatPanel" class="AnswerFloatPanelStyle" >
                <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" >
                    <ContentTemplate>
                        Completed Questions:
                        <asp:DataList ID="ResultsList" >
                            <ItemTemplate>
                                <asp:Label ID="ResultQuestion"  Text='<%# Eval("Key") %>' />
                                ::
                                <asp:Label ID="ResultAnswer"  Text='<%# Eval("Value") %>' />
                            </ItemTemplate>
                        </asp:DataList>
                        <p style="text-align: right">
                            <asp:Button ID="SubmitButton" Text="Submit"  Visible="false"
                                OnClick="SubmitButton_Click" />
                        </p>
                        <asp:Label ID="Message" runat="Server" />
                    </ContentTemplate>
                </asp:UpdatePanel>
            </div>

            <asp:XmlDataSource ID="SurveyDataSource" 
                                
                               XPath="/Questions/Question"
                               DataFile="~/App_Data/SurveyQuestions.xml"/>
            <asp:DataList
                ID="SurveyDataList"
                DataSourceID="SurveyDataSource"
                >

                <ItemTemplate>
                  <table cellpadding="2" cellspacing="2">
                    <tr>
                      <td valign="top">
                        <asp:Label id="QuestionLabel" Text='<%# XPath("@Title")%>'  />
                      </td>
                    </tr>
                    <tr><td>
                      <asp:RadioButtonList ID="ChoicesRadioButtonList"  
                        DataSource='<%#XPathSelect("Choices/Choice") %>'
                        DataTextField="InnerText" DataValueField="InnerText" 
                        AutoPostBack="True"
                        ToolTip='<%# "Question" + XPath("@ID") %>'
                        OnSelectedIndexChanged="ChoicesRadioButtonList_SelectedIndexChanged"/>
                    </td></tr>
                  </table>
                  <hr />
                </ItemTemplate>
            </asp:DataList>
        </div>
    </form>
</body>
</html>

Programmgesteuertes Erstellen von UpdatePanel-Steuerelementen

Wenn Sie einer Seite ein UpdatePanel-Steuerelement programmgesteuert hinzufügen möchten, erstellen Sie eine neue Instanz des UpdatePanel-Steuerelements. Anschließend fügen Sie der Seite mithilfe der ContentTemplateContainer-Eigenschaft und der ControlCollection.Add-Methode Steuerelemente hinzu. Fügen Sie der ContentTemplate-Eigenschaft Steuerelemente nicht direkt hinzu.

Wenn ein UpdatePanel-Steuerelement programmgesteuert hinzugefügt wird, können als Trigger für den Bereich nur Postbacks verwendet werden, die von Steuerelementen in demselben Namenscontainer wie das UpdatePanel-Steuerelement verwendet werden.

Das folgende Beispiel zeigt, wie einer Seite ein UpdatePanel-Steuerelement programmgesteuert hinzugefügt wird. Im Beispiel werden dem Bereich ein Label und ein Button-Steuerelement mithilfe der ContentTemplateContainer-Eigenschaft hinzugefügt. Da die ChildrenAsTriggers-Eigenschaft standardmäßig den Wert true hat, fungiert das Button-Steuerelement als Trigger für den Bereich.

<%@ 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 Page_Load(ByVal Sender As Object, ByVal E As EventArgs)
        Dim up1 As UpdatePanel
        up1 = New UpdatePanel()
        up1.ID = "UpdatePanel1"
        up1.UpdateMode = UpdatePanelUpdateMode.Conditional
        Dim button1 As Button
        button1 = New Button()
        button1.ID = "Button1"
        button1.Text = "Submit"
        AddHandler button1.Click, AddressOf Button_Click
        Dim label1 As Label
        label1 = New Label()
        label1.ID = "Label1"
        label1.Text = "A full page postback occurred."
        up1.ContentTemplateContainer.Controls.Add(button1)
        up1.ContentTemplateContainer.Controls.Add(label1)
        Page.Form.Controls.Add(up1)

    End Sub
    Protected Sub Button_Click(ByVal Sender As Object, ByVal E As EventArgs)
        Dim lbl As Label
        lbl = Page.FindControl("Label1")
        lbl.Text = "Panel refreshed at " & _
            DateTime.Now.ToString()
    End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title>UpdatePanel Added Programmatically Example</title>
</head>
<body>
    <form id="form1" >
        <div>
            <asp:ScriptManager ID="TheScriptManager"
                                />
        </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 Page_Load(object sender, EventArgs e)
    {
        UpdatePanel up1 = new UpdatePanel();
        up1.ID = "UpdatePanel1";
        up1.UpdateMode = UpdatePanelUpdateMode.Conditional;
        Button button1 = new Button();
        button1.ID = "Button1";
        button1.Text = "Submit";
        button1.Click += new EventHandler(Button_Click);
        Label label1 = new Label();
        label1.ID = "Label1";
        label1.Text = "A full page postback occurred.";
        up1.ContentTemplateContainer.Controls.Add(button1);
        up1.ContentTemplateContainer.Controls.Add(label1);
        Page.Form.Controls.Add(up1);

    }
    protected void Button_Click(object sender, EventArgs e)
    {
        ((Label)Page.FindControl("Label1")).Text = "Panel refreshed at " +
            DateTime.Now.ToString();
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title>UpdatePanel Added Programmatically Example</title>
</head>
<body>
    <form id="form1" >
        <div>
            <asp:ScriptManager ID="TheScriptManager"
                                />
        </div>
    </form>
</body>
</html>

Steuerelemente, die nicht mit UpdatePanel-Steuerelementen kompatibel sind

Die folgenden ASP.NET-Steuerelemente sind nicht mit Teilaktualisierungen von Seiten kompatibel und wurden daher nicht für den Einsatz in einem UpdatePanel-Steuerelement entwickelt:

  • TreeView-Steuerelement unter verschiedenen Bedingungen. Eine Bedingung ist beispielsweise, dass Rückrufe aktiviert sind, die nicht zu einem asynchronen Postback gehören. Eine weitere Bedingung liegt vor, wenn Sie Stile direkt als Steuerelementeigenschaften festlegen, anstatt das Steuerelement implizit über einen Verweis auf CSS-Stile zu formatieren. Eine andere Bedingung besteht darin, dass die EnableClientScript-Eigenschaft den Wert false hat (der Standardwert ist true). Eine weitere Bedingung liegt vor, wenn Sie den Wert der EnableClientScript-Eigenschaft zwischen asynchronen Postbacks ändern. Weitere Informationen finden Sie unter Übersicht über das TreeView-Webserversteuerelement.

  • Menu-Steuerelement, wenn Sie Stile direkt als Steuerelementeigenschaften festlegen, anstatt das Steuerelement implizit über einen Verweis auf CSS-Stile zu formatieren. Weitere Informationen finden Sie unter Übersicht über das Menü-Steuerelement.

  • FileUpload-Steuerelement und HtmlInputFile-Steuerelement, wenn sie zum Hochladen von Dateien im Zuge eines asynchronen Postbacks verwendet werden.

  • GridView-Steuerelement und DetailsView-Steuerelement, wenn ihre EnableSortingAndPagingCallbacks-Eigenschaft auf true festgelegt ist. Die Standardeinstellung ist false.

  • Steuerelemente Login, PasswordRecovery, ChangePassword und CreateUserWizard, deren Inhalte nicht in bearbeitbare Vorlagen konvertiert wurden.

  • Das Substitution-Steuerelement.

Wenn Sie ein FileUpload-Steuerelement oder ein HtmlInputFile-Steuerelement innerhalb eines UpdatePanel-Steuerelements verwenden möchten, legen Sie als Postback-Steuerelement, das die Datei sendet, ein PostBackTrigger-Steuerelement für den Bereich fest. Das FileUpload-Steuerelement und das HtmlInputFile-Steuerelement können nur in Postbackszenarien verwendet werden.

Alle anderen Steuerelemente können in UpdatePanel-Steuerelementen verwendet werden. Unter bestimmten Umständen funktioniert ein Steuerelement innerhalb eines UpdatePanel-Steuerelements jedoch möglicherweise nicht wie erwartet. Dies trifft auf folgende Situationen zu:

  • Registrieren von Skripts durch das Aufrufen von Registrierungsmethoden des ClientScriptManager-Steuerelements.

  • Direktes Rendern von Skripts oder Markup während der Wiedergabe von Steuerelementen, z. B. durch das Aufrufen der Write-Methode.

Wenn das Steuerelement Skriptregistrierungsmethoden des ClientScriptManager-Steuerelements aufruft, können Sie stattdessen möglicherweise entsprechende Skriptregistrierungsmethoden des ScriptManager-Steuerelements verwenden. In diesem Fall kann das Steuerelement innerhalb eines UpdatePanel-Steuerelements funktionieren.

Verwenden von Webparts-Steuerelementen in UpdatePanel-Steuerelementen

ASP.NET-Webparts stellt einen integrierten Steuerelementsatz zum Erstellen von Websites dar, mit denen Endbenutzer den Inhalt, die Darstellung und das Verhalten von Webseiten direkt in einem Browser ändern können. Mit folgenden Einschränkungen können Sie Webparts-Steuerelemente in UpdatePanel-Steuerelementen verwenden:

  • Jedes WebPartZone-Steuerelement muss sich im gleichen UpdatePanel-Steuerelement befinden. Beispielsweise können Sie auf der Seite nicht zwei UpdatePanel-Steuerelemente verwenden, von denen jedes über ein eigenes WebPartZone-Steuerelement verfügt.

  • Das WebPartManager-Steuerelement verwaltet alle Clientzustandsinformationen für Webparts-Steuerelemente. Es muss sich im äußersten UpdatePanel-Steuerelement auf einer Seite befinden.

  • Sie können Webparts-Steuerelemente nicht durch ein asynchrones Postback importieren oder exportieren. (Diese Aufgabe erfordert ein FileUpload-Steuerelement, das nicht mit asynchronen Postbacks verwendet werden kann.) Standardmäßig wird beim Importieren von Webparts-Steuerelementen ein vollständiges Postback ausgeführt.

  • Sie können die Stile von Webparts-Steuerelementen während asynchroner Postbacks nicht hinzufügen oder ändern.

Weitere Informationen über Webparts-Steuerelemente finden Sie unter Übersicht über ASP.NET-Webparts.

Eigenschaften und Methoden, die nicht während asynchroner Postbacks unterstützt werden

Die folgenden Szenarien, in denen die Postback-Standardschaltflächen auf einer Seite festgelegt werden, werden nicht während asynchroner Postbacks unterstützt:

  • Die DefaultButton wird während eines asynchronen Postbacks programmgesteuert geändert.

  • Der DefaultButton wird während eines asynchronen Postbacks programmgesteuert geändert, wenn das Panel-Steuerelement nicht in einem UpdatePanel-Steuerelement enthalten ist.

Folgende Methoden der HttpResponse-Klasse werden nur in Postback-Szenarien und nicht in asynchronen Postback-Szenarien unterstützt:

Codebeispiele

Die folgenden Abschnitte enthalten Beispiele, die zeigen, wie UpdatePanel-Steuerelemente erstellt und verwendet werden.

Gewusst-wie-Themen und Themen exemplarischer Vorgehensweisen

Klassenreferenz

In der folgenden Tabelle sind die wichtigsten Serverklassen für UpdatePanel-Steuerelemente dargestellt.

Klasse

Beschreibung

UpdatePanel

Ein Serversteuerelement, das die Teile einer Webseite angibt, für die Teilaktualisierungen von Seiten ausgeführt werden können.

ScriptManager

Ein Serversteuerelement, das das Teilrendering von Seiten verwaltet. Das ScriptManager-Steuerelement registriert Skriptkomponenten, die an den Browser gesendet werden sollen. Es überschreibt auch das Seitenrendering, sodass nur angegebene Bereiche der Seite gerendert werden.

ScriptManagerProxy

Ein Serversteuerelement, das es geschachtelten Komponenten (wie Inhaltsseiten oder Benutzersteuerelemente) gestattet, Verweise auf Skripts und Webdienste hinzuzufügen. Dieses Steuerelement ist hilfreich, wenn das übergeordnete Element bereits ein ScriptManager-Steuerelement enthält.

PageRequestManager

Eine Klasse in der Microsoft AJAX Library, die das Teilrendering von Seiten im Browser koordiniert. Die PageRequestManager-Klasse tauscht Informationen mit dem Server asynchron aus und macht Ereignisse sowie Methoden für die Entwicklung benutzerdefinierter Clientskripts verfügbar.

Weitere Themen

Übersicht über den Lebenszyklus von ASP.NET-Seiten

Siehe auch

Aufgaben

UpdatePanel-Steuerelement – Einführung

Erstellen einer einfachen ASP.NET-Seite mit mehreren UpdatePanel-Steuerelementen

Konzepte

Übersicht über das UpdateProgress-Steuerelement

Übersicht über das Teilrendering von Seiten

Übersicht über die ASP.NET-PageRequestManager-Klasse