最近要做一个招聘系统,其中涉及到了笔试的倒计时功能,找了一些解决方法,在这里记录一种是用scriptmanager调用webservice的实现方法,倒计时间的计算是服务端计算的,即使客户端刷新页面或重新点击开始倒计时也不管用。
aspx文件
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JsWebService倒计时.aspx.cs"
Inherits="AJAXEnabledWebApplication1.JsWebService倒计时" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>JsWebService倒计时</title>
<script type="text/javascript" src="killF5.js"></script>
<script type="text/javascript">
var totalSeconds; //剩余时间(秒)
var timer; //倒计时控制器
var o_blink; //闪烁
var isstart = false; //标记是否开始
//开始倒计时
function kaishi() {
//取消闪烁
if ($get("msg").innerHTML != "") {
$get("msg").innerHTML = "";
stopblink();
}
AJAXEnabledWebApplication1.CountdownService.GetTotalSeconds(onSucceeded); //获取剩余时间(秒)
//开始倒计时
timer = setInterval("startCountdown()", 1000);
isstart = true;
}
//结束倒计时
function jieshu() {
clearInterval(timer);
isstart = false;
}
//倒计时函数
function startCountdown() {
AJAXEnabledWebApplication1.CountdownService.GetTotalSeconds(onSucceeded); //获取剩余时间(秒)
if (totalSeconds > 0) {
var days = Math.floor(totalSeconds / 86400);
var hours = Math.floor(totalSeconds % 86400 / 3600);
var minutes = Math.floor(totalSeconds % 3600 / 60);
var seconds = Math.floor(totalSeconds % 60);
$get("lblDays").innerHTML = days;
$get("lblHours").innerHTML = (hours >= 10 ? hours : "0" + hours);
$get("lblMinutes").innerHTML = (minutes >= 10 ? minutes : "0" + minutes);
$get("lblSeconds").innerHTML = (seconds >= 10 ? seconds : "0" + seconds);
}
else {
clearInterval(timer);
$get("lblSeconds").innerHTML = "00";
$get("msg").innerHTML = "答题时间到!";
blink("msg");
isstart = false;
}
}
//成功获取剩余时间后的回调函数
function onSucceeded(result) {
totalSeconds = result;
}
//时间到提示闪烁
function blink(elId) {
var html = '';
if (document.all)
html += 'var el = document.all.' + elId + ';';
else if (document.getElementById)
html += 'var el = document.getElementById("' + elId + '");';
html +=
'el.style.visibility =' +
'el.style.visibility == "hidden" ? "visible" : "hidden"';
if (document.all || document.getElementById)
o_blink = setInterval(html, 500)
}
//停止闪烁
function stopblink() {
clearInterval(o_blink);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="CountdownService.asmx" />
</Services>
</asp:ScriptManager>
<div id="DivCountdown" style="border-style: solid;" align="center">
JsWebService倒计时<br />
<br />
<input id="Button1" type="button" value="开始计时" onclick="kaishi()" />
 
<input id="Button2" type="button" value="结束计时" onclick="jieshu()" />
<br />
<br />
<asp:Label ID="lblDays" runat="server" Text="0" ForeColor="Red" />天
<asp:Label ID="lblHours" runat="server" Text="0" ForeColor="Red" />时
<asp:Label ID="lblMinutes" runat="server" Text="0" ForeColor="Red" />分
<asp:Label ID="lblSeconds" runat="server" Text="0" ForeColor="Red" />秒
<br />
<span id="msg" style="height: 20px; background-color: #ffe4c4;"></span>
</div>
</div>
</form>
</body>
</html>
webservice.cs文件,考试时长可以在web.config文件中定义或者将对应试题的考试时间保存到数据库,然后从数据库中提取。
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
//
using System.Configuration;
namespace AJAXEnabledWebApplication1
{
/// <summary>
/// CountdownService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class CountdownService : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
public int GetTotalSeconds()
{
DateTime StartTime = DateTime.Now; //开始时间
if (Session["StartTime"] != null)
{
StartTime = (DateTime)Session["StartTime"];
}
else
{
Session["StartTime"] = StartTime;
}
DateTime EndTime = StartTime.Add(TimeSpan.FromHours(double.Parse(ConfigurationManager.AppSettings["timeLength"].ToString())));
DateTime NowTime = DateTime.Now;
TimeSpan Countdown = EndTime - NowTime;
if (Countdown.TotalSeconds<=0)
{
Session["StartTime"] = null;
}
return (Countdown.TotalSeconds > 0) ? (int)Countdown.TotalSeconds : 0;
}
}
}
另外还添加了屏蔽f5和右键的js,一起附上,防止客户端刷新页面。
//屏蔽f5
function DisableF5() {
with (event) {
// F5 and Ctrl+R
if (keyCode == 116 || (ctrlKey && keyCode == 82)) {
event.keyCode = 0;
event.cancelBubble = true;
return false;
}
}
}
document.onkeydown = DisableF5;
//屏蔽网页右鍵,适用于IE6,IE7,IE8,FireFox,谷歌Chrome浏览器
function clickIE4() {
if (event.button == 2) {
return false;
} //end if
} //end func
function clickNS4(e) {
if (document.layers || document.getElementById && !document.all) {
if (e.which == 2 || e.which == 3) {
return false;
} //end if
} //end if
} //end func
function OnDeny() {
if (event.ctrlKey || event.keyCode == 78 && event.ctrlKey || event.altKey || event.altKey && event.keyCode == 115) {
return false;
} //end if
}
if (document.layers) {
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown = clickNS4;
document.onkeydown = OnDeny();
} else if (document.all && !document.getElementById) {
document.onmousedown = clickIE4;
document.onkeydown = OnDeny();
} //end if
document.oncontextmenu = new Function("return false");
分享到:
相关推荐
本示例主要介绍如何在Asp.net环境中,利用ScriptManager组件来调用Web服务,实现客户端与服务器端的无刷新交互。这个例子是在Visual Studio 2008(C#)中编译并通过的,基于.NET Framework 3.5。 首先,让我们了解...
【ScriptManager调用WebService示例】 在Asp.net开发中,ScriptManager是一个非常重要的组件,它使得页面可以利用Ajax技术实现部分页面更新,提供更好的用户体验。这个例子是关于如何使用ScriptManager来调用...
在本项目中,“asp.net2.0 调用websevice 实现天气预报”,我们将探讨如何利用ASP.NET 2.0集成Web服务(Web Service)来获取并展示实时天气信息,从而实现一个无刷新的天气预报应用。 首先,Web服务是一种基于XML的...
标题中的".NET 倒计时 不刷新"指的是在.NET框架下实现的一个倒计时功能,而且这个功能在页面不刷新的情况下也能正常工作。这通常涉及到网页的异步更新技术,比如AJAX(Asynchronous JavaScript and XML)或者 ...
本篇文章将深入探讨如何在ASP.NET中实现一个倒计时器,并提供相关代码示例。 首先,我们需要了解ASP.NET中的Web控件,这是实现倒计时器的基础。ASP.NET提供了一种声明式编程模型,允许开发者通过HTML标记来创建和...
根据给定的信息,本文将详细解释如何在C#中实现一个无刷新的时间倒计时功能,特别是针对在线团购网站的应用场景。此功能主要用于显示剩余时间,直到某个特定事件发生(如团购结束)。为了达到这一目的,我们将使用...
在这个课程中,我们将看到如何将UpdatePanel与WebService结合,实现在客户端调用WebService并更新页面内容。 WebService是一种基于HTTP协议的服务,能够跨域提供数据。在ASP.NET中,我们通常使用ASMX文件来创建...
本示例通过Ajax调用WebServic服务 1、自己做时注意要将service.cs的service class定义前加上[ScriptService](添加两个引用system....3、webservice和ajaxproject同目录,可以在两个解决方案里实现! 希望对初学者有用
为了在ASP.NET页面中调用WebService,我们可以使用ScriptManager控件,它允许我们在客户端使用JavaScript调用Web服务。 在页面的代码-behind中,我们可以为提交按钮的Click事件编写事件处理程序。在这里,我们将...
在ASP.NET Web Forms开发中,ScriptManager和UpdatePanel控件是实现页面异步局部更新的重要工具,这在提升用户体验方面有着显著的作用。本项目通过VS2008环境进行,包含了一个详细的文档说明,旨在帮助开发者理解这...
2. **设置 AJAX**:安装 AJAX 控件工具包后,可以添加 AJAX 支持到项目中,包括 ScriptManager 控件,使得页面可以异步调用 Webservice。 3. **编写 Webservice**:创建一个新的 ASMX Webservice 文件,实现长轮询...
2. 设置属性:ScriptManager提供了许多属性来定制其行为,如`EnablePageMethods`用于启用页面方法调用,`Services`用于指定Web服务URL,`LoadScriptsBeforeUI`控制是否在UI渲染前加载脚本等。 三、AJAX功能支持 ...
在添加ScriptManager到页面后,我们可以通过AJAX调用WebService,而无需离开当前页面,提高用户体验。 接下来,课程可能会讲解如何创建一个简单的WebService。在ASP.NET中,创建一个ASMX文件,然后定义一个公共方法...
2. **启用AJAX**:通过ScriptManager,你可以轻松地启用页面的部分更新,即异步更新,从而实现无刷新的用户界面。 3. **服务引用**:它可以添加对Web服务(ASMX、WCF)的引用,使得在客户端可以直接调用这些服务。 ...
UpdatePanel负责定义网页上可以异步更新的区域,而ScriptManager则管理整个页面的AJAX功能,包括注册脚本、调用WebService等。当在UpdatePanel内触发事件时,AJAX请求会被发送到服务器,而不是引发整个页面的回发。 ...
有两种方式可以实现这一点: - **引用预编译脚本库**:通过指定脚本库的信息,ScriptManager能够自动加载预编译的脚本文件。 ```xml <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:...
此程序为使用ScriptManager+Ajax调用WCF服务(为服务定义接口),其中有些问题讨论,请参考博客:http://blog.csdn.net/zaijianluoye110/article/details/25361225
- 这些功能都是通过调用 `ScriptManager.RegisterStartupScript` 方法实现的,该方法接收四个参数: - 第一个参数为页面对象。 - 第二个参数为注册脚本的类型。 - 第三个参数为脚本 ID,用于标识脚本,确保不会...
在.NET框架中,ScriptManager是ASP.NET AJAX库的核心组件,它是实现异步页面更新和JavaScript服务功能的关键。本文将深入探讨ScriptManager的功能、工作原理以及如何通过实例来使用它进行AJAX开发。 ScriptManager...