这是我以前刚学习asp.net ajax的时候总结的,如果有什么错误的地方,请大家指出,以便我能早日改正。![]()
1. 作用: UpdatePanel控件用来控制页面的局部更新,这些更新依赖于ScriptManager的EnablePartialRendering属性,如果此属性设为false,则局部更新将失去作用。
2.基本结构:
1
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="always" RenderMode="block">2
<ContentTemplate>3
</ContentTemplate>4
<Triggers>5
<asp:AsyncPostBackTrigger ControlID="" EventName="" />6
<asp:PostBackTrigger ControlID="" /> 7
</Triggers> 8
</asp:UpdatePanel>9
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。
1
UpdatePanel up = new UpdatePanel();2
up.ID = "UpdatePanel1";3
up.UpdateMode = UpdatePanelUpdateMode.Conditional;4
Label lbl = new Label();5
lbl.ID = "Label1";6
lbl.Text = "动态生成UpdatePanel控件";7
up.ContentTemplateContainer.Controls.Add(lbl);8
this.Page.Form.Controls.Add(up);9
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的显示时间
1
protected void Page_Load(object sender, EventArgs e)2

{3
if (!Page.IsPostBack)4

{5
lbl.Text = DateTime.Now.ToString();6
}7
ScriptManager1.RegisterAsyncPostBackControl(btn);8
}9

10

11
protected void btn_Click(object sender, EventArgs e)12

{13
lbl.Text = DateTime.Now.ToString();14
UpdatePanel1.Update();15
}16
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()方法.
1
((UpdatePanel)ContentPlaceHolder1.FindControl("UpdatePanel1")).Update();2
或:3
UpdatePanel up = ContentPlaceHolder1.FindControl("UpdatePanel1") as UpdatePanel;4
up.Update();5
注意:此时的UpdatePanel的UpdateMode方法必须为conditional,否则程序报错。














