我正在尝试获取服务器当前时间的运行时钟以向用户显示。我目前向用户展示了它,但每次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
有关如何解决此问题的任何想法?
答案 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;