将Timer控件用作UpdatePanel的触发器

翻译|其它|编辑:郝浩|2007-09-13 11:20:14.000|阅读 1880 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  Timer  控件用作  UpdatePanel  的触发器

ASP.NET AJAX Timer  概述

ASP.NET AJAX Timer  控件每隔特定的时间间隔执行一次页面回传,它有一个  Interval  属性来定义时间间隔.到点时就在服务器端触发  Timer    Tick  事件. 如果你希望整个页面回传(full postback)的话,你只需将  Timer  控件放在页面上,就像其它控件一样。但如果你希望  Timer  触发局部回传,你有2种选择: 1.  Timer  控件放在  UpdatePanel  控件里 2.  Timer  控件放在  UpdatePanel  控件外,再明白地将其注册为一个  AsyncPostBackTrigger,另外,可以在  Timer    Tick  事件处理器里修改  Timer  属性(主要是  Enabled    Elapsed),如果有必要的话你可以在运行的时候修改这些值.  Timer  添加到页面后,我们还要考虑使用  Timer  的一些其它的事情.

AJAX Timer Considerations

1.  Timer  控件放在  UpdatePanel  的里面或者外面时,其行为稍有不同。

Timer  控件放在页面的什么地方将决定  Elapsed  值是如何计算的.如果  Timer  放置在UpdatePanel  ,当一个局部回传执行时它继续运行。所以,假如  Elapsed  设置为5秒,而局部回传执行了3秒,那么当局部回传执行完毕2秒后就会触发  timer  控件;而当  Timer  控件放置在一个  UpdatePanel  内部时,当回传执行时  Timer  就停止运行,直到回传执行完毕后才运行.

2.  Elapsed  属性的值设置的足够大,以便  Tick  事件处理器有足够的事件完成执行.

由于放置在  UpdatePanel  控件外的  Timer  控件在局部回传处于执行状态时仍在运行,如果  Timer  控件到点了而局部回传还没有执行完毕,那么当前的执行请求将会被取消而执行一个新的请求.这是你所不愿看到的.

3.当不再需要  Timer  时将其关闭

Timer  控件将一直运行直到用户导航到其它页面或通过编程的方式将其  Enabled  属性设置为'false'.如果你有办法确定不再需要  Timer  控件了,将其关闭即可.如上图,当所有操作的状态为'Complete',我们用不着再使用  Timer  .


Implementation(
执行)

下面是  UpdatePanel  的声明代码,注意它包含了  GridView    Timer  控件:

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <%--Typical GridView--%>
        <asp:GridView
            ID="gvOperations" runat="server"
            GridLines="None" Width="100%"
            AllowSorting="true" DataSourceID="odsOperations"
            OnRowDataBound="GvOperations_RowDataBound">
            <AlternatingRowStyle BackColor="aliceBlue" />
            <HeaderStyle HorizontalAlign="Left" />
        </asp:GridView>
        <%--The Timer that causes the partial postback--%>
        <asp:Timer runat="server" Interval="1500" OnTick="Timer_Tick" />               
    </ContentTemplate>
</asp:UpdatePanel>

下面是  Timer    OnTick  事件处理器,它依照  Waiting -> Running -> Complete  的状态调用  UpdateStatus. 特别的我们还可以调用  DataBind    GridView  进行重新绑定以查看最新的情况.

private void Timer_Tick(object sender, EventArgs args)
{
    //  update the data (only here for demo purposes)
    if (DateTime.Now.Millisecond % 2 == 0)
    {
        UpdateStatus("Waiting", "Running");
    }

    if (DateTime.Now.Millisecond % 3 == 0)
    {
        UpdateStatus("Running", "Complete");
    }
   
    //  refresh the grid
    this.gvOperations.DataBind();
}

就是这样的,祝编程愉快!


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP