UpdatePanel 控件

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

UpdatePanel 控件需要 web.config 文件中的特定设置才能正常工作。如果您试图使用此控件,但您的网站不包含所需的 web.config 文件,则在网页的“设计”视图中本应显示该控件之处会出现错误。在“设计”视图中,如果您单击处于该状态的控件,则 Microsoft Expression Web 会让您选择要新建一个 web.config 文件还是更新现有的 web.config 文件。

方案

UpdatePanel 控件是一个服务器控件,借助它,可以开发出具有复杂客户端行为的网页,使网页能够更好地与最终用户进行交互。编写在服务器和客户端进行协调以便只更新网页指定部分的代码通常需要深入了解 ECMAScript (JavaScript)。但是,使用 UpdatePanel 控件,可以使网页参与部分页更新,而无需编写任何客户端脚本。如果您需要,可以添加自定义客户端脚本来改善客户端用户的使用体验。使用 UpdatePanel 控件时,网页行为与浏览器无关并可以潜在减少客户端和服务器之间传输的数据量。

背景

UpdatePanel 控件的工作方式是指定可更新的网页区域,而不刷新整个网页。此过程由 ScriptManager 服务器控件和客户端 PageRequestManager 类进行协调。当部分页更新被启用时,控件可异步发布到服务器。异步回发的行为类似于常规回发,因为生成的服务器网页执行整个网页和控件生命周期。但是,使用异步回发,网页更新被限制为 UpdatePanel 控件中包含的网页区域以及被标记为要更新的区域。服务器仅向浏览器发送受影响元素的 HTML 标记。

启用部分页更新

UpdatePanel 控件要求网页中有一个 ScriptManager 控件。默认情况下,当 ScriptManager 控件的 EnablePartialRendering 属性的默认值为 true 时会启用部分页更新。

指定 UpdatePanel 控件的内容

通过在“设计”视图中将内容放在面板中,可以向 UpdatePanel 控件添加内容。例如,可以将其他 ASP.NET 和 HTML 控件拖入该面板,并将光标置于面板内并直接在其中键入内容。在“设计”视图中向 UpdatePanel 控件添加内容时,系统会自动在内容两边添加必要的 <ContentTemplate></ContentTemplate> 标记。如果您是在“代码”视图而不是“设计”视图中向 UpdatePanel 控件添加内容,则必须手动添加 <ContentTemplate></ContentTemplate> 标记(如果它们尚不存在),否则不会呈现 UpdatePanel 控件中的内容。

当包含一个或多个 UpdatePanel 控件的网页第一次呈现时, UpdatePanel 控件的所有内容都将呈现并发送到浏览器。以后发生异步回发时,可能会分别更新各个 UpdatePanel 控件的内容。更新取决于面板设置、哪些元素引发了回发,以及每个面板特有的代码。

指定 UpdatePanel 触发器

默认情况下, UpdatePanel 控件内的任何回发控件都会导致异步回发并刷新面板的内容。但是,您也可以将网页上的其他控件配置为刷新 UpdatePanel 控件。为此,需要为 UpdatePanel 控件定义触发器。触发器是指定哪个回发控件和事件导致面板更新的绑定。当发生触发器控件的指定事件(例如,按钮的 Click 事件)时,就会刷新更新面板。您可以使用“UpdatePanelTrigger 集合编辑器”对话框为 UpdatePanel 控件创建触发器,该对话框可从“标记属性”面板的 Triggers 属性调出。

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

如何刷新 UpdatePanel 控件

以下列表介绍的 UpdatePanel 控件的属性设置决定在部分页呈现过程中面板的内容何时更新:

  • 如果 UpdateMode 属性设置为“Always”,则网页的任何地方发生的每个回发都会导致 UpdatePanel 控件内容进行更新。其中包括其他 UpdatePanel 控件内的控件引发的异步回发,以及不在 UpdatePanel 控件内的控件引发的回发。

  • 如果 UpdateMode 属性设置为“Conditional”,则当以下其中一项为真时 UpdatePanel 控件的内容会得到更新:

    • 当回发是由该 UpdatePanel 控件的触发器所引起时。

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

    • UpdatePanel 控件嵌套在另一个 UpdatePanel 控件内且父面板发生更新时。

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

如果 ChildrenAsTriggers 属性设置为 false 且 UpdateMode 属性设置为“Always”,则会引发异常。仅当 UpdateMode 属性设置为“Conditional”时,才能使用 ChildrenAsTriggers 属性。

使用嵌套的 UpdatePanel 控件

UpdatePanel 控件可以嵌套。如果父面板被刷新,则所有嵌套的面板都会刷新。如果子面板被刷新,则仅该子面板会更新。

与 UpdatePanel 控件不兼容的控件

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

  • 在以下几种情况下的 Treeview 控件:一种是当回调不是作为异步回发的一部分启用时;一种是您直接将样式设置为控件属性,而不是使用对 CSS 样式的引用隐式为控件设置样式时;另一种是 EnableClientScript 属性为 false(默认值为 true)时;还有一种是您在两次异步回发之间更改 EnableClientScript 属性的值时。

  • Menu 控件:当您直接将样式设置为控件属性,而不是使用对 CSS 样式的引用隐式为该控件设置样式时。

  • FileUploadHtmlInputFile 控件:当它们用来作为异步回发一部分的上载文件时。

  • EnableSortingAndPagingCallbacks 属性被设置为 true 时的 GridViewDetailsView 控件。默认值为 false。

  • 其内容尚未被转换为可编辑模板的 LoginPasswordRecoveryChangePasswordCreateUserWizard 控件。

  • Substitution 控件。

若要将 FileUploadHtmlInputFile 控件用在 UpdatePanel 控件内,请将提交该文件的回发控件设置为该面板的 PostBackTrigger 控件。 FileUploadHtmlInputFile 控件可以仅用在回发情况下。

所有其他控件均可用在 UpdatePanel 控件内。

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

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

  • 每个 WebPartZone 控件都必须在同一个 UpdatePanel 控件内。例如,网页上不能有两个这样的 UpdatePanel 控件:每一个都具有自己的 WebPartZone 控件。

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

  • 不能使用异步回发来导入或导出 Web 部件控件。(执行此任务需要一个 FileUpload 控件,它不能用于异步回发。)默认情况下,导入 Web 部件控件会执行完整回发。

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

有关 UpdatePanel 控件的详细信息,请参阅 MSDN Library 中的 UpdatePanel 控件概述 Cc295545.xtlink_newWindow(zh-cn,Expression.40).png

有关 UpdatePanel 控件的所有属性的说明,请参阅 MSDN Library 中的 UpdatePanel 属性 Cc295545.xtlink_newWindow(zh-cn,Expression.40).png

另请参阅

任务

教程:如何按规定的时间间隔刷新 UpdatePanel 控件

概念

教程:如何创建包含两个独立更新区域的网页
ScriptManager 控件
部分页呈现概述