2013-08-28 114 views
1

我在asp.net vb頁面上有一個按鈕和一個標籤,當按下按鈕時,我需要一個倒計時器,以10分鐘開始並每秒更新一次,09:59,09:58,09:57等....我需要計時器繼續倒計時,儘管任何回發或臨時重定向到一個不同的頁面。通過回發持久化的asp.net(VB)倒數計時器

到目前爲止,我已經嘗試使用Asp.Net定時器(與異步觸發器/更新面板),但秒倒計時這需要做1秒回發,並將成爲相當資源昂貴,當有數百用戶訪問系統。它目前將確切的倒計時時間寫入會話變量,然後在頁面重新加載時檢索 - 這是一種非常醜陋的方法,但它們只能讓它工作。

更新 - 我已經找到了解決我的問題:

使用這個偉大的Javascript倒計時腳本http://scripts.hashemian.com/js/countdown.js

ASPX頁面:

<asp:Literal runat="server" ID="jsTimeMarker"/> 
    <script type="text/javascript" src="http://scripts.hashemian.com/js/countdown.jss"></script> 
    <asp:Button runat="server" Text="10 Mins" ID="btn10Mins"/> 

代碼頁背後:

Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     ' Set Countdown Timer based on if Cookie is set 
     If Not Request.Cookies("CountDownTimer") Is Nothing Then 
      TimeMarkerRender(Request.Cookies("CountDownTimer")("Data")) 
     End If 
    End If 
End Sub 

Sub TimeMarkerRender(TargetDateTime As String) 
    Dim sb As StringBuilder = New StringBuilder() 
    sb.Append("<script type=""text/javascript"">") 
    'sb.Append("TargetDate = ""08/28/2013 18:11:29"";") 
    sb.Append("TargetDate = " & "'" & TargetDateTime & "'" & ";") 
    sb.Append("CountActive = true;") 
    sb.Append("CountStepper = -1;") 
    sb.Append("LeadingZero = true;") 
    sb.Append("DisplayFormat = ""%%M%%:%%S%%"";") 
    sb.Append("FinishMessage = ""Finished"";") 
    sb.Append("</script> ") 
    jsTimeMarker.Text = sb.ToString() 
End Sub 

Protected Sub btn10Mins_Click(sender As Object, e As EventArgs) Handles btn10Mins.Click 
    Response.Cookies("CountDownTimer")("Data") = Now.AddMinutes(10).ToString("MM/dd/yyyy HH:mm:ss") 
    Response.Redirect(Request.RawUrl) 
End Sub 
+0

你能證明你的代碼。你試過了什麼? –

+0

您正在製作的方法聽起來與我將要做的相似,儘管可能不使用'Session'而是使用'ViewState'。 你可能會逃脫使用JavaScript來倒計時,但如果這是一個在線考試,你可能不想使用JavaScript,因爲用戶可以禁用此功能。 –

+0

@Secret Squirrel - 它不適用於在線考試 - 用戶在接聽電話時按下按鈕。他們需要知道什麼時候10分鐘到了,所以他們可以終止通話。以前我從來沒有對ViewState做過任何事情 - 你有沒有例子? – James

回答

1

我的意思是,你發現的基本問題是堅持它,儘管任何形式的回發都會變得困難並且不夠準確。你可以爲你的內容頁面使用iframe,並且讓外部頁面上的javascript運行計數器,或者你可以啓動一個新的窗口,在你的用戶工作時計數器正在運行?

這裏是JavaScript的一個簡單的倒數計時器: https://mindgrader.com/tutorials/1-how-to-create-a-simple-javascript-countdown-timer

+0

我不能使用IFRAME或新窗口,因爲它需要在主頁面上。我喜歡鏈接中的倒數計時器和@Jason P設置cookie的想法 – James

1

更新 - 我已經找到了解決我的問題:

使用這個偉大的Javascript倒計時腳本http://scripts.hashemian.com/js/countdown.js

ASPX頁面:

<asp:Literal runat="server" ID="jsTimeMarker"/> 
    <script type="text/javascript" src="http://scripts.hashemian.com/js/countdown.jss"></script> 
    <asp:Button runat="server" Text="10 Mins" ID="btn10Mins"/> 

代碼頁背後:

Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     ' Set Countdown Timer based on if Cookie is set 
     If Not Request.Cookies("CountDownTimer") Is Nothing Then 
      TimeMarkerRender(Request.Cookies("CountDownTimer")("Data")) 
     End If 
    End If 
End Sub 

Sub TimeMarkerRender(TargetDateTime As String) 
    Dim sb As StringBuilder = New StringBuilder() 
    sb.Append("<script type=""text/javascript"">") 
    'sb.Append("TargetDate = ""08/28/2013 18:11:29"";") 
    sb.Append("TargetDate = " & "'" & TargetDateTime & "'" & ";") 
    sb.Append("CountActive = true;") 
    sb.Append("CountStepper = -1;") 
    sb.Append("LeadingZero = true;") 
    sb.Append("DisplayFormat = ""%%M%%:%%S%%"";") 
    sb.Append("FinishMessage = ""Finished"";") 
    sb.Append("</script> ") 
    jsTimeMarker.Text = sb.ToString() 
End Sub 

Protected Sub btn10Mins_Click(sender As Object, e As EventArgs) Handles btn10Mins.Click 
    Response.Cookies("CountDownTimer")("Data") = Now.AddMinutes(10).ToString("MM/dd/yyyy HH:mm:ss") 
    Response.Redirect(Request.RawUrl) 
End Sub 
+0

太棒了!謝謝。 只是一件事:你有一個錯字,它應該讀取countdown.js而不是countdown.jss –