无法使用计时器更新标签

时间:2012-01-07 17:23:11

标签: asp.net timer label

我有一个使用脚本管理器的母版页,而在另一个页面上,我想要显示一个从0到10分钟计数的数字时钟。 asp.net代码:

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
</asp:ScriptManagerProxy>
<asp:Timer ID="Timer1" runat="server" Interval="5000" ontick="Timer1_Tick">
    </asp:Timer>    
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
<ContentTemplate>
 <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>

C#代码:

int min=0,sec=0;
 protected void Timer1_Tick(object sender, EventArgs e)
 { 
    if (sec == 55)
    {
        min = min + 1;
        sec = 0;
    }
    else
    {
        sec = sec + 5;
    }
    Label1.Text = min.ToString() +":"+ sec.ToString();
    if(min==10&&sec==0)
    {
        Timer1.Enabled=false;
        Label1.Text = "clock over!";
    }

页面以0:5开头,完全没有变化。请指出d代码是否有错误!

1 个答案:

答案 0 :(得分:1)

我敢打赌,它将成为您的更新面板。出于调试目的

  1. 在没有upadte面板的情况下尝试 - 它是否正常工作
  2. 将计时器放在更新面板中,忘记触发器
  3. 事实上,无论如何都可以完成第2点 - 我不确定将它作为回发触发器的好处。

    中的计时器也可以

    <强>然而

    老实说,我不会这样做。 Tick方法不会执行回发(尽管是部分的)只是为了让计时器显示进行。

    有许多免费提供的组件将完全在客户端运行,这将会提高很多(很多)效率。

    JQuery Timer

    修改

    其实我觉得我已经发现了这个问题。这是你记录分钟和秒的方式。这些都是变量,每次回发都会被重置(Timer tick)。 Youu需要将它们存储在可以进行回发的内容中,例如视图状态

    protected void Timer1_Tick(object sender, EventArgs e)  {  
    
       ViewState["min"] //not int min
       ViewState["sec"] //not int sec
    
       //.. you would need to use Convert (or Int32.Parse) to get 
       //.. then as an int to work with
    
    }
    

    但是本土 - 仍然不这样做。使用JQuery组件或类似的