2

默认.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>

默认.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:45:34在下一秒之后而不是显示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

这可以(并且可能应该)使用 javascript 来完成,但是如果您需要使用服务器端代码,那么我首先建议您将时间间隔减少到半秒而不是一秒,以适应服务器和服务器之间的一些延迟客户端机器。其次,我会确保来回发送的页面的唯一部分是计时器标签本身,以使传递的数据包尽可能小。代码本身看起来不会超过几毫秒,所以我认为您看到 2 秒跳跃的原因主要是因为计时器间隔。

如前所述,您可以将字符串解析为日期时间变量,然后使用 addseconds 函数减去一秒(通过传入 -1),而不是拆分字符串并手动操作每个字段。我比时间跨度更熟悉日期时间对象,但它确实是个人喜好。如果您使用 datetime 对象,则需要调用.toshorttimestringor ,.tolongtimestring具体取决于您要查找的格式。

于 2012-07-25T22:48:37.297 回答
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>

我使用了隐藏字段,它会不断更新计时器,现在,我正在使用<div>它来显示计数器

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

现在我将我的 javascript 和 css 代码添加到我的文件中,以便更好地查看倒数计时器

计时器.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 回答