`

scriptmanager调用webservice实现的倒计时

阅读更多
最近要做一个招聘系统,其中涉及到了笔试的倒计时功能,找了一些解决方法,在这里记录一种是用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()" />
            &nbsp;&nbsp
            <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调用webservice

    本示例主要介绍如何在Asp.net环境中,利用ScriptManager组件来调用Web服务,实现客户端与服务器端的无刷新交互。这个例子是在Visual Studio 2008(C#)中编译并通过的,基于.NET Framework 3.5。 首先,让我们了解...

    ScriptManager call webservice sample

    【ScriptManager调用WebService示例】 在Asp.net开发中,ScriptManager是一个非常重要的组件,它使得页面可以利用Ajax技术实现部分页面更新,提供更好的用户体验。这个例子是关于如何使用ScriptManager来调用...

    asp.net2.0 调用websevice 实现天气预报

    在本项目中,“asp.net2.0 调用websevice 实现天气预报”,我们将探讨如何利用ASP.NET 2.0集成Web服务(Web Service)来获取并展示实时天气信息,从而实现一个无刷新的天气预报应用。 首先,Web服务是一种基于XML的...

    .NET 倒计时 不刷新

    标题中的".NET 倒计时 不刷新"指的是在.NET框架下实现的一个倒计时功能,而且这个功能在页面不刷新的情况下也能正常工作。这通常涉及到网页的异步更新技术,比如AJAX(Asynchronous JavaScript and XML)或者 ...

    as.net倒计时器

    本篇文章将深入探讨如何在ASP.NET中实现一个倒计时器,并提供相关代码示例。 首先,我们需要了解ASP.NET中的Web控件,这是实现倒计时器的基础。ASP.NET提供了一种声明式编程模型,允许开发者通过HTML标记来创建和...

    C#时间倒计时

    根据给定的信息,本文将详细解释如何在C#中实现一个无刷新的时间倒计时功能,特别是针对在线团购网站的应用场景。此功能主要用于显示剩余时间,直到某个特定事件发生(如团购结束)。为了达到这一目的,我们将使用...

    ASP.NET AJAX深入浅出系列课程(4):客户端访问WebService(上):基本使用方式

    在这个课程中,我们将看到如何将UpdatePanel与WebService结合,实现在客户端调用WebService并更新页面内容。 WebService是一种基于HTTP协议的服务,能够跨域提供数据。在ASP.NET中,我们通常使用ASMX文件来创建...

    Ajax调用webservice

    本示例通过Ajax调用WebServic服务 1、自己做时注意要将service.cs的service class定义前加上[ScriptService](添加两个引用system....3、webservice和ajaxproject同目录,可以在两个解决方案里实现! 希望对初学者有用

    ASP.NET使用WebService创建货物定购窗体

    为了在ASP.NET页面中调用WebService,我们可以使用ScriptManager控件,它允许我们在客户端使用JavaScript调用Web服务。 在页面的代码-behind中,我们可以为提交按钮的Click事件编写事件处理程序。在这里,我们将...

    ScriptManager和UpdatePanel控件实现页面异步局部更新效果

    在ASP.NET Web Forms开发中,ScriptManager和UpdatePanel控件是实现页面异步局部更新的重要工具,这在提升用户体验方面有着显著的作用。本项目通过VS2008环境进行,包含了一个详细的文档说明,旨在帮助开发者理解这...

    基于 AJAX和Webservice 的长轮询方式ServerPush技术模拟

    2. **设置 AJAX**:安装 AJAX 控件工具包后,可以添加 AJAX 支持到项目中,包括 ScriptManager 控件,使得页面可以异步调用 Webservice。 3. **编写 Webservice**:创建一个新的 ASMX Webservice 文件,实现长轮询...

    ScriptManager控件的使用(ASP.NET Web)

    2. 设置属性:ScriptManager提供了许多属性来定制其行为,如`EnablePageMethods`用于启用页面方法调用,`Services`用于指定Web服务URL,`LoadScriptsBeforeUI`控制是否在UI渲染前加载脚本等。 三、AJAX功能支持 ...

    ASP.NET AJAX深入浅出系列课程(4):客户端访问WebService(上):基本使用方式_PDF.zip

    在添加ScriptManager到页面后,我们可以通过AJAX调用WebService,而无需离开当前页面,提高用户体验。 接下来,课程可能会讲解如何创建一个简单的WebService。在ASP.NET中,创建一个ASMX文件,然后定义一个公共方法...

    使用ScriptManager控件实例代码

    2. **启用AJAX**:通过ScriptManager,你可以轻松地启用页面的部分更新,即异步更新,从而实现无刷新的用户界面。 3. **服务引用**:它可以添加对Web服务(ASMX、WCF)的引用,使得在客户端可以直接调用这些服务。 ...

    ASP.NET AJAX深入浅出系列课程(6):客户端访问WebService(下):原理与细节

    UpdatePanel负责定义网页上可以异步更新的区域,而ScriptManager则管理整个页面的AJAX功能,包括注册脚本、调用WebService等。当在UpdatePanel内触发事件时,AJAX请求会被发送到服务器,而不是引发整个页面的回发。 ...

    AJAX中的ScriptManager实战用法

    有两种方式可以实现这一点: - **引用预编译脚本库**:通过指定脚本库的信息,ScriptManager能够自动加载预编译的脚本文件。 ```xml &lt;asp:ScriptManager ID="ScriptManager1" runat="server"&gt; &lt;/asp:...

    使用ScriptManager+Ajax调用WCF服务(为服务定义接口)

    此程序为使用ScriptManager+Ajax调用WCF服务(为服务定义接口),其中有些问题讨论,请参考博客:http://blog.csdn.net/zaijianluoye110/article/details/25361225

    AJAX弹出框_利用ScriptManager.RegisterStartupScript

    - 这些功能都是通过调用 `ScriptManager.RegisterStartupScript` 方法实现的,该方法接收四个参数: - 第一个参数为页面对象。 - 第二个参数为注册脚本的类型。 - 第三个参数为脚本 ID,用于标识脚本,确保不会...

    ScriptManager,ajax实例

    在.NET框架中,ScriptManager是ASP.NET AJAX库的核心组件,它是实现异步页面更新和JavaScript服务功能的关键。本文将深入探讨ScriptManager的功能、工作原理以及如何通过实例来使用它进行AJAX开发。 ScriptManager...

Global site tag (gtag.js) - Google Analytics