ASP.NET - UpdatePanel 控件概述

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

使用 ASP.NET UpdatePanel 控件可生成功能丰富的、以客户端为中心的 Web 应用程序。通过使用 UpdatePanel 控件,可以刷新页的选定部分,而不是使用回发刷新整个页面。这称为执行“部分页更新”。包含一个 ScriptManager 控件和一个或多个 UpdatePanel 控件的 ASP.NET 网页可自动参与部分页更新,而不需要自定义客户端脚本。

 

一、介绍

      UpdatePanel 控件通过指定页中无需刷新整个页面即可更新的区域发挥作用。此过程由 ScriptManager 服务器控件和客户端 PageRequestManager 类来协调。当启用部分页更新时,控件可以通过异步方式发布到服务器。异步回发的行为与常规回发类似:生成的服务器页执行完整的页和控件生命周期。不过,通过使用异步回发,可将页更新限制为包含在 UpdatePanel 控件中并标记为要更新的页区域。服务器仅将受影响的元素的 HTML 标记发送到浏览器。在浏览器中,客户端 PageRequestManager 类执行文档对象模型 (DOM) 操作以将现有 HTML 替换为更新的标记。

      说明: 使用异步回发或使用 XMLHTTPRequest 对象时,如果 URL 包含双字节字符,则可能发生回发错误。此问题可以通过下面的方法得到解决:在页面的 head 元素中加入 <base href="url"/> 元素,其中 href 属性设置为引用该页面的 URL 编码的字符串。可以添加动态添加到服务器代码中的此元素。

 

下图演示一个首次加载的页和一个后续异步回发,该回发将刷新 UpdatePanel 控件的内容。

1.1、部分页呈现概述

 

1.2、启用部分页更新

UpdatePanel 控件在网页中需要 ScriptManager 控件。默认情况下,将启用部分页更新,因为 ScriptManager 控件的 EnablePartialRendering 属性的默认值为 true

下面的示例显示用于定义页面上的 ScriptManager 控件和 UpdatePanel 控件的标记。UpdatePanel 控件包含一个 Button 控件,当单击该控件时,将刷新面板中的内容。默认情况下,ChildrenAsTriggers 属性为 true。因此,Button 控件将用作异步回发控件。

<asp:ScriptManager ID="ScriptManager"

                   runat="server" />

<asp:UpdatePanel ID="UpdatePanel1"

                 UpdateMode="Conditional"

                 runat="server">

    <ContentTemplate>

       <fieldset>

       <legend>UpdatePanel content</legend>

        <!-- Other content in the panel. -->

        <%=DateTime.Now.ToString() %>

        <br />

        <asp:Button ID="Button1"

                    Text="Refresh Panel"

                    runat="server" />

        </fieldset>

    </ContentTemplate>

</asp:UpdatePanel>

 

1.3、指定 UpdatePanel 控件内容

可以通过声明方式向 UpdatePanel 控件添加内容,也可以在设计器中通过使用 ContentTemplate 属性来添加内容。在标记中,将此属性作为 ContentTemplate 元素公开。若要以编程方式添加内容,请使用 ContentTemplateContainer 属性。

当首次呈现包含一个或多个 UpdatePanel 控件的页时,将呈现 UpdatePanel 控件的所有内容并将这些内容发送到浏览器。在后续异步回发中,可能会更新各个 UpdatePanel 控件的内容。更新将与面板设置、导致回发的元素以及特定于每个面板的代码有关。

 

1.4、指定 UpdatePanel 触发器

默认情况下,UpdatePanel 控件内的任何回发控件都将导致异步回发并刷新面板的内容。但是,也可以配置页上的其他控件来刷新 UpdatePanel 控件。可以通过为 UpdatePanel 控件定义触发器来做到这一点。触发器是一类绑定,用于指定使面板更新的回发控件和事件。当引发触发器控件的指定事件(例如,按钮的 Click 事件)时,将刷新更新面板。

 

下面的示例演示如何为 UpdatePanel 控件指定触发器。

<asp:Button ID="Button1"

            Text="Refresh Panel"

            runat="server" />

<asp:ScriptManager ID="ScriptManager1"

                   runat="server" />

<asp:UpdatePanel ID="UpdatePanel1"

                 UpdateMode="Conditional"

                 runat="server">

                 <Triggers>

                   <asp:AsyncPostBackTrigger ControlID="Button1" />

                 </Triggers>

                 <ContentTemplate>

                 <fieldset>

                 <legend>UpdatePanel content</legend>

                 <%=DateTime.Now.ToString() %>

                 </fieldset>

                 </ContentTemplate>

</asp:UpdatePanel>

      使用 UpdatePanel 控件的 Triggers 元素内的 asp:AsyncPostBackTrigger 元素定义触发器。(如果在 Visual Studio 中编辑页面,则可以使用“UpdatePanelTrigger 集合编辑器”对话框创建触发器。)

触发器的控件事件是可选的。如果不指定事件,则触发器事件是控件的默认事件。例如,对于 Button 控件,默认事件是 Click 事件。

 

1.5、如何刷新 UpdatePanel 控件

下面的列表描述 UpdatePanel 控件的属性设置,这些设置确定在部分页呈现过程中何时刷新面板的内容。

如果 UpdateMode 属性设置为 Always,则 UpdatePanel 控件的内容在每次从页上的任意位置执行回发时都会更新。这包括来自其他 UpdatePanel 控件内部的控件的异步回发,也包括来自 UpdatePanel 控件外部的控件的回发。

如果 UpdateMode 属性设置为 Conditional,则 UpdatePanel 控件的内容在出现以下情况下之一时更新:

·当回发由 UpdatePanel 控件的触发器引起时。

·当显式调用 UpdatePanel 控件的 Update 方法时。

·当 UpdatePanel 控件嵌套在另一个 UpdatePanel 控件内并更新父面板时。

·当 ChildrenAsTriggers 属性设置为 true 并且 UpdatePanel 控件的子控件导致回发时。嵌套的 UpdatePanel 控件的子控件不会导致更新外部 UpdatePanel 控件,除非将它们显式定义为父面板的触发器。

如果 ChildrenAsTriggers 属性设置为 false UpdateMode 属性设置为 Always,则将引发异常。此 ChildrenAsTriggers 属性仅在 UpdateMode 属性设置为 Conditional 时使用。

 

1.6、在母版页中使用 UpdatePanel 控件

若要在母版页中使用 UpdatePanel 控件,必须决定如何包含 ScriptManager 控件。如果在母版页上包含 ScriptManager 控件,则可将其用作所有内容页的 ScriptManager 控件。(如果要以声明方式在内容页中注册脚本或服务,可将 ScriptManagerProxy 控件添加到该内容页。)

如果母版页不包含 ScriptManager 控件,则可以将 ScriptManager 控件单独放置在包含 UpdatePanel 控件的每个内容页上。设计选择取决于您计划如何管理应用程序中的客户端脚本。有关如何管理客户端脚本的更多信息,请参见 ScriptManager 控件概述。

在某些情况下,ScriptManager 控件位于母版页上,对于某个内容页,不需要使用部分页呈现功能。在上述情况下,对于相应的内容页,必须以编程方式将 ScriptManager 控件的 EnablePartialRendering 属性设置为 false

 

下面的示例显示用于母版页上的 ScriptManager 控件和内容页上的 UpdatePanel 控件的标记。在本示例中,将在母版页上定义一个名为 LastUpdate 的属性,并从 UpdatePanel 控件内部引用该属性。

<%@ Master Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

 

    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 >

<head id="Head1" runat="server">

    <title>ScriptManager in Master Page Example</title>

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <asp:ScriptManager ID="ScriptManager1" runat="server" />

            <asp:Panel ID="MasterPanel1" runat="server" GroupingText="Master Page">

               <asp:Button ID="Button1" runat="server" Text="Full Page Refresh" />

               <asp:Button ID="Button2" runat="server" Text="Refresh Panel" OnClick="MasterButton2_Click" />

            </asp:Panel>

            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

            </asp:ContentPlaceHolder>

        </div>

    </form>

</body>

</html>

 

<%@ Page Language="C#" MasterPageFile="MasterCS.master"

    Title="ScriptManager in Content Page" %>

 

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

 

<script runat="server">

 

    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"

               runat="server" >

        <asp:UpdatePanel ID="UpdatePanel1"

                         UpdateMode="Conditional"

                         runat="server">

            <ContentTemplate>

                <p>

                    Last updated: <strong>

                        <%= Master.LastUpdate.ToString() %>

                    </strong>

                </p>

                <asp:Button ID="Button3"

                            Text="Refresh Panel"

                            OnClick="Button3_Click"

                            runat="server"  />

            </ContentTemplate>

        </asp:UpdatePanel>

    </asp:Panel>

</asp:Content>

 

1.7、使用嵌套的 UpdatePanel 控件

UpdatePanel 控件可以嵌套。如果刷新父面板,则也会刷新所有嵌套的面板。

下面的示例显示用于在一个 UpdatePanel 控件内定义另一个 UpdatePanel 控件的标记。父面板中的按钮会同时触发父面板和子面板中的内容更新;而子面板中的按钮仅触发子面板的更新。

<%@ Page Language="C#" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

</script>

 

<html >

<head id="Head1" runat="server">

    <title>UpdatePanelUpdateMode Example</title>

    <style type="text/css">

    div.NestedPanel

    {

      position: relative;

      margin: 2% 5% 2% 5%;

    }

    </style>

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <asp:ScriptManager ID="ScriptManager"

                               runat="server" />

            <asp:UpdatePanel ID="OuterPanel"

                             UpdateMode="Conditional"

                             runat="server">

                <ContentTemplate>

                    <div>

                        <fieldset>

                            <legend>Outer Panel </legend>

                            <br />

                            <asp:Button ID="OPButton1"

                                        Text="Outer Panel Button"

                                        runat="server" />

                            <br />

                            Last updated on

                            <%= DateTime.Now.ToString() %>

                            <br />

                            <br />

                            <asp:UpdatePanel ID="NestedPanel1"

                                               UpdateMode="Conditional"

                                               runat="server">

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

                                                        runat="server" />

                                        </fieldset>

                                    </div>

                                </ContentTemplate>

                            </asp:UpdatePanel>

                        </fieldset>

                    </div>

                </ContentTemplate>

            </asp:UpdatePanel>

        </div>

    </form>

</body>

</html>

      下面的示例演示一个带有 GridView 控件的嵌套的 UpdatePanel 控件。GridView 控件位于 UpdatePanel 控件内,且每个 GridView 行包含嵌套在另一个 UpdatePanel 控件内的 GridView 控件。

<%@ Page Language="C#" %>

 

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

 

<html  >

<head runat="server">

    <title>Browse Departments</title>

    <script runat="server">

        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" runat="server">

    <div>

        <asp:ScriptManager runat="server" ID="ScriptManager1" EnablePartialRendering="true" />

        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">

            <ContentTemplate>

        <asp:GridView ID="DepartmentsGridView" runat="server" 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" runat="server" UpdateMode="Conditional">

                            <ContentTemplate>

                                <asp:GridView ID="EmployeesGridView" runat="server" 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 runat="server" ID="InnerTimeLabel"><%=DateTime.Now %></asp:Label>

                                <asp:SqlDataSource ID="EmployeesDataSource" runat="server" 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 runat="server" ID="OuterTimeLabel"><%=DateTime.Now %></asp:Label>

            </ContentTemplate>

        </asp:UpdatePanel>

        &nbsp;

        <asp:SqlDataSource ID="DepartmentDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"

            SelectCommand="SELECT DepartmentID, Name, GroupName FROM HumanResources.Department ORDER BY Name">

        </asp:SqlDataSource>

 

    </div>

    </form>

</body>

</html>

      当内部 GridView 控件显示一页新记录时,不会刷新外部面板和外部 GridView 控件的其他行中的面板。当外部 GridView 控件显示一页新记录时,外部面板和嵌套的面板都会刷新。

 

1.8、以编程方式刷新 UpdatePanel

下面的示例演示如何以编程方式刷新 UpdatePanel 控件。在本示例中,页通过调用 RegisterAsyncPostBackControl 方法将一个控件注册为触发器。代码通过调用 Update 方法以编程方式刷新 UpdatePanel 控件。

<%@ Page Language="C#" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

 

    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 >

<head id="Head1" runat="server">

    <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" runat="server">

        <div>

            <asp:ScriptManager ID="ScriptManager1" runat="server" />

            <div id="AnswerFloatPanel" class="AnswerFloatPanelStyle" runat="server">

                <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">

                    <ContentTemplate>

                        Completed Questions:

                        <asp:DataList ID="ResultsList" runat="server">

                            <ItemTemplate>

                                <asp:Label ID="ResultQuestion" runat="server" Text='<%# Eval("Key") %>' />

                                ::

                                <asp:Label ID="ResultAnswer" runat="server" Text='<%# Eval("Value") %>' />

                            </ItemTemplate>

                        </asp:DataList>

                        <p style="text-align: right">

                            <asp:Button ID="SubmitButton" Text="Submit" runat="server" Visible="false"

                                OnClick="SubmitButton_Click" />

                        </p>

                        <asp:Label ID="Message" runat="Server" />

                    </ContentTemplate>

                </asp:UpdatePanel>

            </div>

 

            <asp:XmlDataSource ID="SurveyDataSource"

                               runat="server"

                               XPath="/Questions/Question"

                               DataFile="~/App_Data/SurveyQuestions.xml"/>

            <asp:DataList

                ID="SurveyDataList"

                DataSourceID="SurveyDataSource"

                runat="server">

 

                <ItemTemplate>

                  <table cellpadding="2" cellspacing="2">

                    <tr>

                      <td valign="top">

                        <asp:Label id="QuestionLabel" Text='<%# XPath("@Title")%>' runat="server" />

                      </td>

                    </tr>

                    <tr><td>

                      <asp:RadioButtonList ID="ChoicesRadioButtonList" runat="server"

                        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>

 

1.9、以编程方式创建 UpdatePanel 控件

若要以编程方式向页中添加 UpdatePanel 控件,请创建 UpdatePanel 控件的新实例。然后,通过使用 ContentTemplateContainer 属性和 ControlCollection..::.Add 方法向新实例添加控件。不要直接向 ContentTemplate 属性添加控件。

当以编程方式添加 UpdatePanel 控件时,仅来自与 UpdatePanel 控件处于同一命名容器中的控件的回发可用作面板的触发器。

下面的示例演示如何以编程方式向页中添加 UpdatePanel 控件。此示例通过使用 ContentTemplateContainer 属性向面板添加 Label Button 控件。因为 ChildrenAsTriggers 属性默认为 true,所以 Button 控件用作面板的触发器。

<%@ Page Language="C#" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

 

    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 >

<head id="Head1" runat="server">

    <title>UpdatePanel Added Programmatically Example</title>

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <asp:ScriptManager ID="TheScriptManager"

                               runat="server" />

        </div>

    </form>

</body>

</html>

 

1.10、与 UpdatePanel 控件不兼容的控件

下面的 ASP.NET 控件与部分页更新不兼容,因此不应在 UpdatePanel 控件内使用:

·处于多种情况下的 TreeView 控件。一种情况是启用了不是异步回发的一部分的回调。另一种情况是将样式直接设置为控件属性,而不是通过使用对 CSS 样式的引用来隐式设置控件的样式。还有一种情况是 EnableClientScript 属性为 false(默认值为 true)。另外,还有一种情况是在异步回发之间更改了 EnableClientScript 属性的值。 ·Menu 控件(将样式直接设置为控件属性,而不是通过使用对 CSS 样式的引用来隐式设置控件的样式时)。

·FileUpload HtmlInputFile 控件(当它们作为异步回发的一部分用于上载文件时)。

·GridView DetailsView 控件(当它们的 EnableSortingAndPagingCallbacks 属性设置为 true 时)。默认值为 false

·LoginPasswordRecoveryChangePassword CreateUserWizard 控件(其内容尚未转换为可编辑的模板)。

·Substitution 控件。

 

若要在 UpdatePanel 控件内使用 FileUpload HtmlInputFile 控件,请将提交文件的回发控件设置为面板的 PostBackTrigger 控件。仅可以在回发方案中使用 FileUpload HtmlInputFile 控件。

所有其他控件都可以在 UpdatePanel 控件内发挥作用。不过,在某些情况下,控件在 UpdatePanel 控件内可能不会按预期方式工作。这些情况包括:

·通过调用 ClientScriptManager 控件的注册方法注册脚本。

·在该控件呈现过程中直接呈现脚本或标记,例如,通过调用 Write 方法。

 

如果该控件调用 ClientScriptManager 控件的脚本注册方法,则也许能够改用 ScriptManager 控件相应的脚本注册方法。在此情况下,该控件可以在 UpdatePanel 控件内工作。

 

1.11、在 UpdatePanel 控件内使用 Web 部件控件

ASP.NET Web 部件是一组集成控件,用于创建网站使最终用户可以直接从浏览器修改网页的内容、外观和行为。可以在 UpdatePanel 控件内使用 Web 部件控件,但具有以下限制:

·每个 WebPartZone 控件都必须在同一 UpdatePanel 控件内。例如,页上不能具有两个带有各自的 WebPartZone 控件的 UpdatePanel 控件。

·WebPartManager 控件管理 Web 部件控件的所有客户端状态信息。它必须在页面上的最外部的 UpdatePanel 控件内。

·不能通过使用异步回发导入或导出 Web 部件控件。(执行此任务需要 FileUpload 控件,该控件不能与异步回发一起使用。)默认情况下,导入 Web 部件控件将执行完全回发。

·在异步回发过程中,不能添加或修改 Web 部件控件的样式。

 

1.12、异步回发过程中不支持的属性和方法

在异步回发过程中,不支持在页面上设置默认回发按钮的以下方案:

·在异步回发过程中以编程方式更改 DefaultButton

·在异步回发过程中,当 Panel 控件不在 UpdatePanel 控件内部时以编程方式更改 DefaultButton

 

仅在回发方案(不包括异步回发方案)下才支持 HttpResponse 类的以下方法:

BinaryWriteClearClearContentClearHeadersCloseEndFlush

TransmitFileWriteWriteFileWriteSubstitution

树莓派Zero USB2.0也能跑满?实测RTL8153千兆网卡的真实速度 本文实测了树莓派Zero通过RTL8153千兆网卡在USB2.0接口下的网络性能表现。通过硬件适配、系统优化和驱动调优,实现了217.6Mbps的传输速度,相比原厂百兆网卡提升130%,为微型计算机的网络性能瓶颈提供了实用解决方案。 阅读详情

相关推荐

ASP.NETUpdatePanel的使用与注意事项

ASP.NET Web Forms应用开发中,是一个非常有用的控件,它可以实现部分页面更新,减少了整个页面的刷新,提高了用户体验。然而,在使用时,如果不注意一些细节,可能会遇到一些意想不到的问题。本文将结合实际案例,探讨的使用方法及需要注意的点。

m0_74337424的博客 287

ASP.net UpdatePanel控件

UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel简单的使用方法(第一篇)。 主要内容 1.UpdatePan...

jessie1984的博客 351

开关电源的纹波和噪声电压-抑制方法

开关电源(包括AC/DC转换器、DC/DC转换器、AC/DC模块和DC/DC模块)与线性电源相比较,最突出的优点是转换效率高,一般可达80%~85%,高的可达90%~97%;其次,开关电源采用高频变压器替代了笨重的工频变压器,不仅重量减轻,体积也减小了,因此应用范围越来越广。 但开关电源的缺点是由于其开关管工作于高频开关状态,输出的纹波和噪声电压较大,一般为输出电压的1%左右(低的为输出电压的0.5%左右),最好产品的纹波和噪声电压也有几十mV;而线性电源的调整管工作于线性状态,无纹波电压,输出的噪声电压也

ltqdxl的博客 1万+

ASP.NET AJAX 学习之三 UpdatePanel控件

UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel简单的使用方法 。主要内容1.UpdatePanel控件概述

CHENMH的专栏 1344

ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略

asp.net UpdatePanel实现异步局部刷新 这篇博客转载于https://blog.csdn.net/chenhongwu666/article/details/41392529 UpdatePanel局部刷新的使用 ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果。其中的UpdatePanel就是设置页面中异 步局部更新区域,它必须依赖于ScriptManager存在,因为ScriptManger控件提供了客户端脚本生成与管理UpdatePanel

菜鸡程序员的博客 2598

ASP.NET - UpdatePanel 控件概述 AJAX

使用 ASP.NET UpdatePanel 控件可生成功能丰富的、以客户端为中心的 Web 应用程序。通过使用 UpdatePanel 控件,可以刷新页的选定部分,而不是使用回发刷新整个页面。这称为执行“部分页更新”。包含一个 ScriptManager 控件和一个或多个 Up

我的左脸像我的右脸 913

ASP.NET AJAX入门系列(4):使用UpdatePanel控件(一)

 UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel简单的使用方法(第一篇)。 主要内容1.Update

vainnetwork的专栏 708

asp.net UpdatePanel简介

UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAXExtensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel简单的使用方法(第一篇)。主要内容:1.

892

asp.net ajax学习历程(二)

asp.net系列课程,我准备按照这个课程来学习ajax extension的一些控件,这是来自博客园的一系列文章作者:TerryLee出处:http://terrylee.cnblogs.com ASP.NET AJAX入门系列(1):概述 ASP.NET AJAX入门系列(2):使用ScriptManager控件 ASP.NET AJAX入门系列(3):使用ScriptMana

平凡酿就非凡 605

用Microsoft ASP.NET AJAX技术构建交互式的用户界面—part1

 本文英文原版以及代码下载:http://aspnet.4guysfromrolla.com/articles/101007-1.aspx#postadlink用Microsoft ASP.NET AJAX技术构建交互式的用户界面—part1导言在过去的几年时间里,web开发员开始使用JavaScript来向web服务器执行异步回传,也就是仅仅发送和接收必要的数据.这些技术通常统称为A

heker2007的专栏 2129

ASP.NET AJAX入门系列

ASP.NET AJAX入门系列 ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新。   目录 ASP.NET AJAX入门系列(1):

记录成长的每一步 513

新瓶旧酒ASP.NET AJAX(1) - 简单地过一下每个控件(ScriptManager、ScriptManagerProxy

[索引页][源码下载] 新瓶旧酒ASP.NET AJAX(1) - 简单地过一下每个控件(ScriptManager、ScriptManagerProxy、UpdatePanel、 UpdateProgress和Timer) 作者:webabcd介绍ASP.NET AJAX就5个控件,分别是ScriptManager、ScriptManagerProx...

weixin_34062469的博客 118

ajax开发实例教程.net页面屏聊系统

  主要对asp.net ajax的安装以及本文中所要用到的控件进行简单的说明,大家如有兴趣可以通到网络上查询更多的资料。   1、何为asp.net ajax?   当然asp.net ajax的功能并不是仅仅只有如上所叙的那么点点,由于很多的功能我们这里用不到,就不多费口舌了。asp.net ajax control toolkit中有数十种超炫的控件,大家有兴趣可以一个个试试。

355
上一篇: ASP.NET - 演练:对多个 UpdatePanel 控件使用 ASP.NET Timer 控件
下一篇: 触摸屏原理
dodream
博客等级 码龄21年 93粉丝 247原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值