在ASP.net中显示更新的服务器时间

时间:2013-12-18 19:22:59

标签: asp.net ajax vb.net timer

我正在尝试获取服务器当前时间的运行时钟以向用户显示。我目前向用户展示了它,但每次UpdatePanel用新的时间更新标签时它都会回显整个页面。

ASP.net代码如下:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="updateTime" runat="server" UpdateMode="Conditional">
   <ContentTemplate>
       <asp:Label ID="lblServerTime" runat="server" Text=""></asp:Label>
       <asp:Timer ID="timer" Interval="1000" runat="server" />
   </ContentTemplate>
</asp:UpdatePanel>

我的VB代码背后是:

    Private Sub timer_Tick(sender As Object, e As System.EventArgs) Handles timer.Tick
    lblServerTime.Text = DateTime.Now.ToString("f", CultureInfo.CreateSpecificCulture("en-US"))
End Sub

有关如何解决此问题的任何想法?

4 个答案:

答案 0 :(得分:2)

我建议向服务器发出异步请求以获取间隔时间而不是使用更新面板,如下所示:

标记:

$(document).ready(function() {
    setInterval('getServerTime()', 1000);
});

function getServerTime() {
    $.ajax({
       type: "POST",
       url: "Default.aspx/GetServerTime",
       data: "{}",
       contentType: "application/json; charset=utf-8",
       dataType: "json",
       success: function(result) {
           // Replace the DIV's content with the page method's return value
           $("#results").text(result.d);
       }
    });
}

<div id="results"></div>

  

注意:setInterval()会一次又一次地每1000毫秒(1秒)触发一次。


代码隐藏:

<WebMethod> _
Public Shared Function GetServerTime() As String
    Return DateTime.Now.ToString("f", CultureInfo.CreateSpecificCulture("en-US"))
End Function

答案 1 :(得分:1)

<asp:UpdatePanel ID="updateTime" runat="server" UpdateMode="Conditional">
   <ContentTemplate>
       <asp:Label ID="lblServerTime" runat="server" Text=""></asp:Label>
       <asp:Timer ID="timer" Interval="1000" runat="server" />
   </ContentTemplate>
    <Triggers>
   <asp:AsyncPostBackTrigger ControlID="timer" EventName="Tick" />
   </Triggers>
</asp:UpdatePanel>

在更新面板中添加触发器。

答案 2 :(得分:0)

vb不好,只是用c#说主题。你可能会从中得到这个想法。您需要使用触发器,以便使用计时器触发tick事件。

<强> HTML

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
                  </asp:ToolkitScriptManager>
                  <asp:Timer ID="updtimer" runat="server" interval="1000" ontick="updtimer_Tick">
                  </asp:Timer>
                  <asp:UpdatePanel ID="updpanel" runat="server">
                  <Triggers>
                     <asp:AsyncPostBackTrigger controlid="updtimer" eventname="Tick" />
                    </Triggers>
                    <ContentTemplate>
                  <asp:Label ID="timedate" runat="server" 
                      Font-Bold="True" Font-Size="Large"></asp:Label>
                    </ContentTemplate>
                    </asp:UpdatePanel>

C#代码

protected void updtimer_Tick(object sender, EventArgs e)
{
    timedate.Text = DateTime.Now.ToString("dd-MM-yyyy  hh:mm:ss tt ");
}

这就是全部。你将通过使用它来获得运行时间。如果你再次陷入困境,请告诉我。 快乐的编码。

答案 3 :(得分:0)

我尝试了上面的解决方案,但我无法让它们工作。以下是我解决它的方法:

<label id="lblServerTime"></label>
<script type="text/javascript">
   var serverTimeMillisecond = "<%= DateTime.UtcNow.Subtract(DateTime.MinValue.AddYears(1969)).TotalMilliseconds %>";
   localTime = new Date();
   offset = localTime.setMilliseconds(localTime.getMilliseconds() - serverTimeMillisecond);
   function runClock() {
      var time = new Date();
      time.setMilliseconds(localTime.getMilliseconds() + offset);
      document.getElementById("lblServerTime").innerHTML = time;
      setTimeout(runClock, 1000);
   }
   runClock();

此外,如果您要将值放入asp.net,则需要使用ClientID作为ID ex:

document.getElementByID("<%= lblServerTime.ClientID %>").innerHTML = someValue;