ASP.NET中的计时问题

时间:2010-06-20 20:47:13

标签: .net asp.net jquery

我正在开发一个asp.net项目,在这个项目中我使用了倒数计时器。我在jquery中写了倒数计时器。它工作得很好。另一方面,当我点击项目中的另一页时,打开倒计时页面。我的倒计时器不应该重启。它必须继续正确倒计时。我认为我用会话做,但会话有点慢。它不适合实时。我该如何处理这个问题?

2 个答案:

答案 0 :(得分:1)

您可以将剩余时间存储在Cookie中。

请参阅Jquery Cookie Plugin

这是一个简单的方法,因为一切都在客户端。但是,如果您需要更安全的东西,可以跟踪服务器端。

// public property on countdown page
public DateTime Countdown
{
    get
    {
        if (Session["Countdown"] == null)
            Session["Countdown"] = DateTime.Now;

        return Session["Countdown"];
    }
}

这个想法是,当用户第一次访问该页面时,会创建一个会话变量“倒计时”,其中包含当前日期和时间,随后对该页面的访问将检索该页面最初访问的日期和时间。您可以在页面上将其渲染为javascript变量,以便您的计时器可以确定剩余时间并从那里开始倒计时。

如果某个Timespan已经过了,你还需要为getter添加一些逻辑来重置会话变量。

答案 1 :(得分:0)

var Timer;
var TotalSec;
function CreateTimer(TimerID, Time) {

    Timer = "#" + TimerID;
    TotalSec = Time;
    // $("mytimer").show("normal", UpdateTimer(TotalSec));
    UpdateTimer(TotalSec)
    window.setTimeout("Tick()", 1000);
}
function Tick() {
    //var toto = Totalsec;
    if (TotalSec <= 0) {

        alert("Time is up")
        jQuery('#btnSet').removeAttr("disabled");
        //       jQuery('#link').removeAttr("Enabled");       
        return;
    }
    TotalSec -= 1;
    UpdateTimer()
    window.setTimeout("Tick()", 1000);
}

function UpdateTimer() {

    var Seconds = TotalSec;

    var Days = Math.floor(Seconds / 86400);
    Seconds -= Days * 86400;

    var Hours = Math.floor(Seconds / 3600);
    Seconds -= Hours * (3600);

    var Minutes = Math.floor(Seconds / 60);
    Seconds -= Minutes * (60);


    var TimeStr = ((Days > 0) ? Days + " gün " : "") + LeadingZero(Hours) + ":" + LeadingZero(Minutes) + ":" + LeadingZero(Seconds)


    //        jQuery("" + Timer + "").text(TimeStr);
    jQuery("#lbldene").text(TimeStr);
}

function LeadingZero(Time) {

    return (Time < 10) ? "0" + Time : +Time;

}



$(document).ready(function() {
    $.ajax({
        type: "POST",
        url: "GenericWCF.svc/Timer",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg){
        CreateTimer('lbldene',msg.d);
        }
    });
});

我已经使用WCF服务来获取剩余时间,因此在页面加载计时器开始倒计时之后。但是,当单击应用程序中的新页面并返回计时器页面时。我的计时器重置我不想要它。我想继续倒计时