5

ASP.NET Web サイトを持っています。ユーザーが決定を下し、特定のボタンのいずれかを一定時間内にクリックして、別のページにリダイレクトしてもらいたいです。彼が決定を下さなかった場合でも、彼は私の頭の中で「選択なし」のマークでリダイレクトされます.

私はasp:Timer時間切れになった後にポストバックを開始するために使用します。ハンドラーを呼び出しResponse.Redirect('page.html', false)てリダイレクトを行っています。Page_Loadこの場合、実際にリダイレクトする前にイベントを処理button_clickできます。timer_tickこれらのイベントの 1 つが処理された後、ページがレンダリングされ、リダイレクトが行われます。

しかし、私には2つの問題があります。まず、入力が十分に長く処理されると、2 番目のタイマーのティックがトリガーされ、新しいポストバックが開始され、現在のものがキャンセルされます! 第 2 に、時間切れになる直前にユーザーがボタンをクリックすると、リダイレクトが行われる前にタイマー チックが発生し、ユーザー クリックの処理が再び上書きされます。

これらの問題を解決するにはどうすればよいですか? 最初のティックがトリガーされた後、またはユーザーがボタンをクリックした後に、クライアント側でタイマーを無効にするにはどうすればよいですか? または、私のタスクを解決するためのより良い方法は何ですか? ありがとう。

4

2 に答える 2

1

バリアントとして、setTimeoutTimer コントロールの代わりにクライアント側関数を使用し、ボタンのクリック時にタイムアウトをクリアすることができます。

 <script type="text/javascript">
      var redirectTimeout = setTimeout(function () {
           location.href = '<%= ResolveClientUrl("~/page.html") %>';
      }, 5000);
 </script>

 <asp:Button runat="server" ID="SubmitButton" Text="Submit" 
      OnClientClick="clearTimeout(redirectTimeout);" />
于 2012-09-24T15:11:16.827 に答える
1

私は両方の問題の解決策を得ました。

  1. asp:Timerコントロールの中に入れましたasp:UpdatePanel。次の質問の前にページ全体を更新する必要がないため、これは私の場合は正しいことです。しかし、この場合、タイマーからのティックが互いに干渉しないことがわかりました。

  2. hereで説明されているようにasp:Timer、次のように JavaScript を使用して無効にすることができます。

    $find("TimerMaxJudgeTime")._stopTimer();
    

    onclick次に、これをボタンのイベントにバインドして完了です。タイマーは 内に配置されるためUpdatePanel、ポストバック後に自動的に再作成され、有効になります。

于 2012-09-25T10:46:08.777 に答える