当ajax定时器(倒计时)显示0时,调用c#函数

时间:2013-03-22 22:30:36

标签: c# javascript asp.net ajax timer

我在简单任务中遇到大问题...在asp.net页面上是Multiview,有两个视图,

在第一个视图中,我有一个ajax计时器,它计算从60到0的秒数。在updatepanel中,标签上显示时间。我想调用我的c#函数来做一些事情并最终改变活动视图。

我该怎么做?

我试图检查Timer_tick事件,如果秒== 0,我调用函数,但它不起作用。 我也试过Timer1.Enabled = false,但它也没有用。

我认为,我必须使用Javascript,但如何?我不知道在哪里以及如何...我还不知道Javascript。

这是我的Timer_Tick事件(标签上的时间正确显示)

  protected void Timer1_Tick(object sender, EventArgs e)
    {
        Test t = (Test)Session["SelectedTest"];

        if (t.Remaining.Minute == 0 && t.Remaining.Second == 0)
        {
            DoSomething();
        }
        else
        {
            t.Remaining= t.Remaining.AddSeconds(-1);
            Label7.Text = t.Remaining.ToLongTimeString();
        }
    }

和我的DoSomething()函数:

     public void DoSomething()
        {

// Doing a lot of things....

            MultiView1.ActiveViewIndex = 3;
        }

功能Dosomething工作正常,我也按钮调用这个功能 - 它正在工作但我也想调用函数,如果剩余秒== 0。

1 个答案:

答案 0 :(得分:0)

是的,我试过这个。调试后我知道,我的c#函数DoSomething()正在运行 - 但最后,View没有改变。在调用DoSomething()后,Timer Ticking再次...

我找到了js功能:

function stopTimer()
{
      var timer = $find("<%=Timer1.ClientID%>")
     timer._stopTimer();
}

但我不知道,我在哪里可以称之为。

编辑:我看到,我的函数DoSomething()多次调用。如果Timer显示0,则函数在每个tick中调用

编辑2: Noob-solution:)

  1. 添加第二个Timer,设置Timer2.Interval = 9999999(或其他高)
  2. 在Timer1_Tick事件中:

    t.Remaining = t.Remaining.AddSeconds(-1);             Label7.Text = t.Remaining.ToLongTimeString();

            if (t.Remaining.Minute == 0 && t.Remaining.Second == 1) Timer2.Interval = 1000;
    
  3. 在Timer2_Tick中调用c#函数
  4. 原因:如果Timer是UpdatePanel的触发器,则无法从Tick事件

    调用c#函数

    **我知道,这是更好的解决方案(可能是JavaScript),但我的截止日期很快,所以我必须使用它。