ASP.NET UpdatePanel 控件可用于生成功能丰富、以客户端为中心的 Web 应用程序。通过使用 UpdatePanel 控件,可以在回发期间刷新网页的选定部分而不是刷新整个网页。这称为执行部分页更新。包含一个 ScriptManager 控件和一个或多个 UpdatePanel 控件的 ASP.NET 网页,不需要使用自定义客户端脚本即可自动参与部分页更新。
UpdatePanel 控件需要 web.config 文件中的特定设置才能正常工作。如果您试图使用此控件,但您的网站不包含所需的 web.config 文件,则在网页的“设计”视图中本应显示该控件之处会出现错误。在“设计”视图中,如果您单击处于该状态的控件,则 Microsoft Expression Web 会让您选择要新建一个 web.config 文件还是更新现有的 web.config 文件。


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 控件创建触发器,该对话框可从“标记属性”任务窗格的“触发器”属性调出。
触发器的控件事件是可选的。如果您不指定事件,触发器事件是控件的默认事件。例如,对于 Button 控件,默认事件是 Click 事件。
如何刷新 UpdatePanel 控件
以下列表介绍的 UpdatePanel 控件的属性设置决定在部分页呈现过程中面板的内容何时更新:
-
如果 UpdateMode 属性设置为“Always”,则网页的任何地方发生的每个回发都会导致 UpdatePanel 控件内容进行更新。其中包括其他 UpdatePanel 控件内的控件引发的异步回发,以及不在 UpdatePanel 控件内的控件引发的回发。
-
如果 UpdateMode 属性设置为“Conditional”,则当以下其中一项为真时 UpdatePanel 控件的内容会得到更新:
-
当回发是由该 UpdatePanel 控件的触发器所引起时。
-
当您显式调用 UpdatePanel 控件的 Update 方法时。
-
当 UpdatePanel 控件嵌套在另一个 UpdatePanel 控件内且父面板发生更新时。
-
当 ChildrenAsTriggers 属性设置为真且该 UpdatePanel 控件的任何子控件导致回发时。嵌套的 UpdatePanel 控件的子控件不会导致外部 UpdatePanel 控件发生更新,除非它们被显式定义为父面板的触发器。
-
如果 ChildrenAsTriggers 属性设置为 false 且 UpdateMode 属性设置为“Always”,则会引发异常。仅当 UpdateMode 属性设置为“Conditional”时,才能使用 ChildrenAsTriggers 属性。
使用嵌套的 UpdatePanel 控件
UpdatePanel 控件可以嵌套。如果父面板被刷新,则所有嵌套的面板都会刷新。如果子面板被刷新,则仅该子面板会更新。
与 UpdatePanel 控件不兼容的控件
下面的 ASP.NET 控件与部分页更新不兼容,因此,不能用在 UpdatePanel 控件内:
-
在以下几种情况下的 Treeview 控件:一种是当回调不是作为异步回发的一部分启用时;一种是您直接将样式设置为控件属性,而不是使用对 CSS 样式的引用隐式为控件设置样式时;另一种是 EnableClientScript 属性为 false(默认值为 true)时;还有一种是您在两次异步回发之间更改 EnableClientScript 属性的值时。
-
Menu 控件:当您直接将样式设置为控件属性,而不是使用对 CSS 样式的引用隐式为该控件设置样式时。
-
FileUpload 和 HtmlInputFile 控件:当它们用来作为异步回发一部分的上载文件时。
-
其 EnableSortingAndPagingCallbacks 属性被设置为 true 时的 GridView 和 DetailsView 控件。默认值为 false。
-
其内容尚未被转换为可编辑模板的 Login、PasswordRecovery、ChangePassword 和 CreateUserWizard 控件。
-
Substitution 控件。
若要将 FileUpload 或 HtmlInputFile 控件用在 UpdatePanel 控件内,请将提交该文件的回发控件设置为该面板的 PostBackTrigger 控件。FileUpload 和 HtmlInputFile 控件可以仅用在回发情况下。
所有其他控件均可用在 UpdatePanel 控件内。
在 UpdatePanel 控件内使用 Web 部件控件
ASP.NET Web 部件是一组集成控件,用于创建网站使最终用户可以直接从浏览器修改网页的内容、外观和行为。只要遵守以下限制,可以在 UpdatePanel 控件内使用 Web 部件控件:
-
每个 WebPartZone 控件都必须在同一个 UpdatePanel 控件内。例如,网页上不能有两个 UpdatePanel 控件,而每个控件又都有其自己的 WebPartZone 控件。
-
WebPartManager 控件管理 Web 部件控件的所有客户端状态信息。它必须在网页上最外面的 UpdatePanel 控件内。
-
不能使用异步回发来导入或导出 Web 部件控件。(执行此任务需要一个 FileUpload 控件,它不能用于异步回发。)默认情况下,导入 Web 部件控件会执行完整回发。
-
在异步回发过程中,不能添加或修改 Web 部件控件的样式。