
3.3 Timer控件
Timer控件是一个可定时运行Postback动作的控件,可用于某些需定时回复信息的功能上,Timer控件本身并未包含任何UI的界面,只是定时地进行Postback动作而已,当其与UpdatePanel控件合作时,便能将定时的Postback动作变成Async-Postback。使用Timer控件的步骤相当简单,只要放一个Timer控件到网页上的UpdatePanel控件中即可。
1. 创建一个新网页,命名为TimerTest.aspx。
2. 在页面中放入一个ScriptManager控件。
3. 放入一个UpdatePanel控件,ID为UpdatePanel1。
4. 将UpdatePanel1控件的UpdateMode设为Conditional。
5. 放一个Timer控件到UpdatePanel1控件中,ID为Timer1。
6. 设定Timer1 控件的Interval为2000,因为Interval是毫秒制,所以2000 代表着每两秒Postback一次。
7. 在UpdatePanel1控件中添加一个Label控件,ID为Label1。
8. 在Timer1控件的Tick事件中,键入程序3-8的代码。
程序3-8
Samples\3\AjaxDemo1\TimerTest.aspx.cs protected void Timer1_Tick(object sender, EventArgs e) { Label1.Text = DateTime.Now.ToString(); }
运行此程序后,便可于网页上看到每两秒回报一次时间,如图3-7所示。

图3-7
那么如果有需求,需要Timer控件在Async-Postback时更新一个以上的UpdatePanel控件呢?很简单,只要将Timer控件移到UpdatePanel控件外,然后将其设定为欲更新UpdatePanel控件的Trigger即可。
1. 创建一个新网页,命名为TimerTest2.aspx。
2. 在页面中放入一个ScriptManager控件。
3. 放入一个Timer控件,Interval设为2000,ID为Timer1。
4. 放入一个UpdatePanel控件,ID为UpdatePanel1。
5. 将UpdatePanel1控件的UpdateMode设为Conditional。
6. 放一个Label控件至UpdatePanel1控件中,ID为Label1。
7. 在UpdatePanel1控件的Triggers属性中添加一个Trigger,ControlID为Timer1,EventName为Tick。
8. 放入一个UpdatePanel控件,ID为UpdatePanel2。
9. 放一个Label控件至UpdatePanel2控件中,ID为Label2。
10. 在UpdatePanel2控件的Triggers属性中添加一个Trigger,ControlID为Timer1,EventName为Tick。
11. 在Timer1控件的Tick事件中,键入程序3-9的代码。
程序3-9
Samples\3\AjaxDemo1\TimerTest2.aspx protected void Timer1_Tick(object sender, EventArgs e) { Label1.Text = DateTime.Now.ToString(); Label2.Text = DateTime.Now.ToString(); }
此程序的运行结果是每两秒刷新一次时间,而且更新了两个UpdatePanel,如图3-8所示。

图3-8
当Timer未放在任何的UpdatePanel中,也未成为任何UpdatePanel的Trigger时,其定期运行的便只是传统的Postback动作,每次Postback都会引起整个网页的刷新。