这是我以前刚学习asp.net ajax的时候总结的,如果有什么错误的地方,请大家指出,以便我能早日改正。
1. 作用: UpdatePanel控件用来控制页面的局部更新,这些更新依赖于ScriptManager的EnablePartialRendering属性,如果此属性设为false,则局部更新将失去作用。
2.基本结构:
3.主要属性:
名称
|
意义
|
ChildrenAsTriggers
|
表示内容模板内的子控件的回发是否更新本模板。
|
UpdateMode
|
表示内容模板的更新模式,一般分为Always和Conditional.
|
RenderMode
|
表示局部更新控件的呈现形式,一般有两种:Block和Inline,当呈现模式选择Block时,局部更新控件在客户端以div形式展现;否则以span展现。
|
ContentTemplateContainer
|
使用编程手法添加UpdatePanel内容。
|
4. 子元素:
名称
|
意义
|
ContentTemplate
|
是局部更新控件的内容模板,可以在其中添加任意控件。
|
Triggers
|
局部更新的触发器。包括两种触发器:一种是异步回发AsyncPostBackTrigger,可以实现局部更新;另一种PostBackTrigger和普通页面的回发一样,不管是否使用了局部更新控件,都会引起页面的全部更新。
|
5.主要说下UpdateMode的两个属性值:
1) Always:默认值。表示UpdatePanel控件在每次回发时都会更新,这包含其它的UpdatePanel控件或此UpdatePanel控件以外的控件引起的回发。当UpdateMode属性设为Always时,此时不允许使用ChildrenAsTriggers属性,如果强行使用,页面运行时会出现错误。
2) Conditional:UpdatePanel控件在满足下列条件之一时引起回发:
i. 引起回发的是UpdatePanel的触发器或子控件。
ii. 显示的调用UpdatePanel的update()方法。
iii. 当此UpdatePanel位于另一个UpdatePanel中,而上级的UpdatePanel更新时。
3) 当同时设置UpdateMode为Conditional和ChildrenAsTriggers=false时,不允许UpdatePanel的子控件更新模板内容。
6. ContentTemplateContainer属性:如果想使用编程方法设置UpdatePanel的内容,需要创建一个UpdatePanel,并且添加内容到它的ContentTemplateContainer属性,而不能直接添加控件到它的ContentTemplate。如果想直接设置ContentTemplate,则需要写一个自定义的Template,并去实现位于System.Web.UI命名空间下的接口ITemplate。
7. 触发器:
1) 普通回调触发器PostBackTrigger:主要针对UpdatePanel模板内的子控件,因为当子控件被触发时,它只会更新模板内的数据,而模板外的数据并不发生变化。有些情况下需要更新全部的内容,这时就可以通过此触发器来实现页面的全面回调。
2) 异步回调触发器AsyncPostBackTrigger:是实现局部更新的关键触发器。 在触发器内定义引起回发的控件和事件。ControlID属性指的是引起回发的控件ID;EventName属性指的是引起回发的控件事件。
8. 用编程的方法控制UpdatePanel的更新(此时的UpdateMode为conditional)
1) 实现:可以通过ScriptManager的RegisterAsyncPostBackControl()方法注册一个异步提交控件,并且调用UpdatePanel的Update()方法进行更新。
2) 适用于:
i. 提交的控件位于UpdatePanel外,而它所要更新的控件位于UpdatePanel里。此时提交,刷新整个页面。
ii. 提交的控件与所要刷新的控件位于两个不同并且没有关系的UpdatePanel中。此时提交,无反应。
3) 示例:Label控件显示当前时间,Button刷新Label的显示时间
9. UpdatePanel嵌套:
1) UpdatePanel可以嵌套使用,即在一个UpdatePanel的ContentTemplate中还可以放入一个或多个UpdatePanel控件。
2) 外层UpdatePanel更新时,它的子UpdatePanel都随着更新。
3) 里层的UpdatrePanel更新时:如果外层UpdatePanel的UpdateMode属性为Always时,内外层全部更新;如果UpdateMode属性为conditional,则只更新里层的UpdatePanel,外层的不随着更新。
10. 母版页更新内容页的UpdatePanel:提交控件位于母版页中,而被更新的控件位于内容页的UpdatePanel中。利用ContentPlaceHolder的FindControl()方法,找到内容页的UpdatePanel,然后再使用Update()方法.
注意:此时的UpdatePanel的UpdateMode方法必须为conditional,否则程序报错。