2016-04-19 14 views
0

プロジェクトにカウントダウンタイマーを挿入しました。私はそれを実行すると、タイマーが始まりますが、私はそれをデバッグを停止し、私が気づいたものを再度実行するとき、タイマーはまだ実行されています。例えば、私は3分の時間をタイマに与えました。つまり、3分後に結果ページにリダイレクトする必要があります。今はページを実行し、カウントダウンタイマーが開始されます...デバッグを停止すると、00 :02:45(時間が残っています)、5秒後に再度実行すると、タイマーは00:02:40(時間が残っています)に進みます。 私はこれが起こるのは嫌です。タイマーの継続を止めるにはどうすればいいですか? 私のコードを見てください。私が間違っている箇所とその解決策を教えてください。 TimerTest.aspx.csページasp.netタイマーコントロールを使用してカウントダウンタイマーを停止するにはどうすればよいですか?

、私は次のコード行があります

:TimerTest.aspxページで

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Data; 
using System.Configuration; 



public partial class Student_TimerTest : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 

    if (Session["end_t"] == null) 
    { 
     DateTime start_time = DateTime.Now; 
     DateTime end_time = start_time.AddMinutes(3); 
     Session["end_t"] = end_time; 
    } 
} 

protected void timer1_tick(object sender, EventArgs e) 
{ 
    DateTime dt = (DateTime)Session["end_t"]; 
    DateTime dt_curr = DateTime.Now; 
    TimeSpan ts = dt - dt_curr; 
    lblTimer.Text = ts.Hours.ToString() + ":" + ts.Minutes.ToString() + ":" + ts.Seconds.ToString(); 
    if (ts.Minutes == 0) 
    { 
     timer1.Enabled = false; 
     Response.Redirect("/Student/Result.aspx"); 
    } 

} 
} 

を、私は次のコード行を挿入しましたティムと言って

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TimerTest.aspx.cs" Inherits="Student_TimerTest" %> 
 

 
<!DOCTYPE html> 
 

 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head runat="server"> 
 
    <title></title> 
 

 
</head> 
 
<body> 
 
    <form id="form1" runat="server"> 
 
    <div> 
 
     <asp:ScriptManager ID= "SM1" runat="server"></asp:ScriptManager> 
 
     <asp:Timer ID="timer1" runat="server" Interval="1000" OnTick="timer1_tick"></asp:Timer> 
 
     </div> 
 
    
 
     <div> 
 
     <asp:UpdatePanel id="updPnl" runat="server" UpdateMode="Conditional"> 
 
     <ContentTemplate> 
 
     <asp:Label ID="lblTimer" runat="server"></asp:Label> 
 
     </ContentTemplate> 
 
     <Triggers> 
 
     <asp:AsyncPostBackTrigger ControlID="timer1" EventName ="tick" /> 
 
     </Triggers> 
 
     </asp:UpdatePanel> 
 
</div> 
 
</form> 
 
</body> 
 
</html>

答えて

1

まだを実行している人は少し誤解を招く。デバッグを終了した後は、実際にはコードは実行されません。 ただし、開始時刻はデフォルトでブラウザに保存されるセッション状態に保存されます。デバッグを停止してから再起動すると、Webアプリケーションのアプリケーションインスタンスが再起動されますが、ブラウザはセッション状態を保持します。だからあなたのブラウザはまだ古い開始時間を持っています。したがって、ページの読み込みでは、if (Session["end_t"] == null)という行はという結果を返します。です。そこにです。

ここには多くのオプションがありますが、でない場合はのポストバックがページロードの値を常にクリアすることがあります。 が投稿バックでの場合は、既にセッションに値があるかどうかを確認してください。

サンプルコード:

protected void Page_Load(object sender, EventArgs e) 
{ 
    // If this is the initial page load (not a post back), 
    // or if there's not already an end time in Session, 
    // then set the end time 
    if (!Page.IsPostBack || Session["end_t"] == null) 
    { 
     DateTime start_time = DateTime.Now; 
     DateTime end_time = start_time.AddMinutes(3); 
     Session["end_t"] = end_time; 
    } 
} 
+0

ありがとうございました。今は正常に動作しています。あなたは、ページをリフレッシュしようとするたびに結果ページにリダイレクトする方法、またはブラウザの戻る矢印をクリックして前のページに戻す方法を教えてください。 –

+0

申し訳ありませんが、私はあなたが何を求めているのかよく分かりません。さらに、このフォローアップの質問を別の質問として掲示し、この質問にリンクするだけでベストになるかもしれません。それは異なる(しかし、関連する)質問のように聞こえる。 – TheRotag

+0

私は言うつもりです。ユーザーがページをリフレッシュし、ページのリロードとタイマーのカウントダウンが再開した場合、本当にページを更新したい場合は警告ボックスを使用してユーザーに警告し、キャンセルをクリックすると更新されません。 ブラウザの更新ボタンをクロスブラウザと互換性のある方法でクリックしたときに、このタイプのアラートボックスを表示するにはどうすればよいですか? –

関連する問題