0

私は単純なタスクで大きな問題を抱えています...asp.netページには2つのビューを持つマルチビューがあります、

最初のビューには、60から0までの秒数をカウントするajaxタイマーがあります。updatepanelのラベルに時間が表示されています。いくつかのことを実行し、最終的にアクティブビューを変更するc#関数を呼び出します。

これどうやってするの ?

Timer_tickイベントをチェックインしようとしましたが、seconds == 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の場合は関数も呼び出したいと思います。

4

1 に答える 1

0

はい、私はこれを試しました。デバッグ後、私の c# 関数 DoSomething() が機能していることはわかっていますが、最後に View は変更されません。DoSomething() を呼び出した後、再びタイマーがカチカチ...

私はjs関数を見つけました:

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

しかし、どこに電話すればよいかわかりません。

編集:私の関数 DoSomething() が何度も呼び出されていることがわかりました。タイマーが 0 を示している場合、関数はティックごとに呼び出されています

Edit2: Noob-solution :)

  1. 2 番目のタイマーを追加し、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# 関数を呼び出す

理由: タイマーが UpdatePanel のトリガーの場合、Tick イベントから ac# 関数を呼び出すことはできません

**それがこれを行うためのより良い解決策であることはわかっていますが (おそらく JavaScript)、締め切りが迫っているので、それを使用する必要があります。

于 2013-03-23T10:20:41.787 に答える