记得在学习.NET AJAX控件的时候,说过一个timer控件。在讲timer的时候,他用了一个电子表的例子,但是又严格说明,如果只是为了一个电子表,完全没有必要一秒一刷。而是在页面加载的时候读取一下服务器的时间,然后在本地进行时间的增加。
前几天在找资料的时候碰到了这样的一个代码,进行一下收藏。
服务端代码
protected void Page_Load(object sender, EventArgs e) { lblTime.Text = DateTime.Now.ToString("hh:mm:ss"); }
客户端代码
需要注意的是,下面代码忽略了网络传输消耗的时间,而且script代码必须在控件的声明下面,否则会出问题,问题具体是什么自己试一下就知道了,出现这个问题的原因,我个人感觉是因为页面加载的机制造成的,所以在引入js文件的时候也需要注意顺序。例如你一个js文件用到了jquery,那么jquery就必须在那个js之前引用。
<form id="form1" runat="server"> <div> <asp:Label ID="lblTime" runat="server" Text="Label"></asp:Label> <script type="text/javascript"> //从页面上获取显示时间的Label var server = document.getElementById("lblTime").innerHTML; //获取时间的时、分、秒 var hours = server.substring(0, 2); var minutes = server.substring(3, 5); var seconds = server.substring(6, 8); //设置定时器,每个1秒,执行一此update函数 setInterval(update, 1000); //每过1秒,对服务器获取到的时间进行改变,并且对lblTime进行赋值 function update() { //增加1秒 seconds++; //当为60秒时,把秒设为0,并且分钟加1 if (seconds == 60) { seconds = 0; minutes++; } //当为60分时,把分设为0,并且小时加1 if (minutes == 60) { minutes = 0; hours++; } //当为24时,把小时还原为0 if (hours == 24) { hours = 0; } //将新时间给lblTime document.getElementById("lblTime").innerHTML = hours + ":" + minutes + ":" + seconds; } </script> </div> </form>