2

Default.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Label ID="Label1" runat="server">2:00:00</asp:Label>
        <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick">
        </asp:Timer>
    </ContentTemplate>
</asp:UpdatePanel>

Default.aspx.vb

Dim timer, timer_arr() As String
timer = Label1.Text
timer_arr = timer.Split(":")
Dim seconds = Integer.Parse(timer_arr(2))
Dim minutes = Integer.Parse(timer_arr(1))
Dim hours = Integer.Parse(timer_arr(0))
If seconds = 0 And minutes = 0 And hours = 0 Then
    Timer1.Enabled = False
Else
    seconds = seconds - 1
End If
If (seconds < 0) Then
    seconds = 59
    minutes = minutes - 1
End If
If minutes < 0 Then
    minutes = 59
    hours = hours - 1
End If

Label1.Text = hours & ":" & minutes & ":" & seconds

期待される結果を示す上記のコード、つまり、カウントダウンタイマーが必要です。カウントダウンタイマーは、のようにクライアントにカウントダウンタイマーを表示します2:45:34。しかし、問題は秒の値が2倍に減少していることです。2:45:34つまり、表示する代わりに次の1秒後に、2:45:33表示する2:45:32などです。私の観点からすると、私は非常に混乱しています。すべてが大丈夫です。助けが必要 !!

更新しました

クライアント側のスクリプト、つまりjavascriptが別のオプションになると思いますが、オンライン試験システムのタイマーが必要です。つまり、クライアントがサーバーにリクエストを送信するたびにタイマーが作動し続ける必要があります。しかし、私がjavascriptを使用する場合、タイマー値が中断され、予期しない値が表示されます。つまり、再度初期化される可能性があります。したがって、サーバーサイドスクリプトが最適だと思います。誰か他の提案があれば、私は感謝します。!!

4

3 に答える 3

0

TimeSpanオブジェクトを使用してみませんか?

Dim ts as new TimeSpan(Integer.Parse(timer_arr(0)),Integer.Parse(timer_arr(1)),Integer.Parse(timer_arr(2)))
dim oneSecond as new TimeSpan(0,0,1) ' hours,min,sec
ts=ts.Subtract(oneSecond)
Label1.Text=ts.ToString("hh:mm:ss")

私はそれをテストしていませんが、素晴らしいはずです

于 2012-07-25T19:54:50.197 に答える
0

この質問の答えを共有するには遅すぎることはわかっています。なぜなら、私はこの解決策を見つけて、他の人が私の解決策の恩恵を受けることができると感じたからです。

これは私がやったことです...

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="questionText" runat="server"></asp:Label>
<asp:HiddenField ID="txt_timer" Value="00:30:00" runat="server" />
<asp:Timer ID="Timer1" runat="server" Interval="1830" OnTick="Timer1_Tick"></asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>

タイマーを更新し続けるhiddenfieldを使用しましたが、現在、<div>カウンターを表示している場所を使用しています

<div id="counter" style="position: absolute; top: 165px; left: 850px;"></div> 

カウントダウンタイマーの見栄えを良くするために、JavaScriptとCSSコードをファイルに追加しました

timer.js

<script src="../ajax/jquery.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/jquery.countdown.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
      $(function(){
        $('#counter').countdown({
          image: '../images/digits.png',
          startTime: document.getElementById('<%= txt_timer.ClientID %>').value,
        //  timerEnd: function(){ //alert('end!'); },        
           });           
      });
    </script>

タイマー.CSS

<style type="text/css">
    .cntSeparator
    {
        font-size: 55px;
        margin: 5px 2px;
        color: #000;
    }
</style>

ここでカウントダウンタイマーのデモを見ることができます

于 2012-12-11T17:43:36.163 に答える
0

これは JavaScript を使用して行うことができます (そしておそらく行うべきです) が、サーバー側のコードを使用する必要がある場合は、最初に間隔を 1 秒ではなく 0.5 秒に減らして、サーバーとクライアント マシン。2 番目に、送受信されるページの唯一の部分がタイマー ラベル自体であることを確認して、通過するパケットをできるだけ小さくします。コード自体は数ミリ秒以上かかるようには見えないので、2 秒のジャンプが見られるのは主にタイマー間隔によるものだと思います。

言われているように、文字列を分割して各フィールドを手動で操作する代わりに、文字列を解析して datetime 変数にし、addseconds 関数を使用して (-1 を渡すことにより) 秒を減算することができます。私はタイムスパンよりも日時オブジェクトに精通していますが、それは本当に個人的な好みです。datetime オブジェクトを使用する場合は、探している形式に応じて.toshorttimestringまたはを呼び出す必要があります。.tolongtimestring

于 2012-07-25T22:48:37.297 に答える