如何在asp.net web应用程序(C#)中制作一个倒计时计时器?

6
我正在创建一个基于C# asp.net的定时在线测试。我已经使用本地机器时间创建了它。但是,在数据库失去连接或系统挂起的情况下,倒计时计时器必须从机器挂起或意外数据库断开的时间开始计算。例如,用户回答问题10分钟后,系统意外挂起。恢复后,倒计时必须从10分钟开始计算。有谁能帮我用C#编写代码吗?
我已经使用了以下代码,但在上述情况下没有用处。
int totalTime = (Convert.ToInt32(ViewState["totaltime"])) * 60;

DateTime startTime = (DateTime)ViewState["startTime"];
TimeSpan elaspedTime = DateTime.Now.Subtract(startTime);
Literal1.Text = elaspedTime.Hours.ToString() + "h" + ":" + elaspedTime.Minutes.ToString() + 
    "m" + ":" + elaspedTime.Seconds.ToString() + "s";

int finish = Convert.ToInt32(elaspedTime.TotalSeconds);

int remaingsec = (totalTime - finish);
TimeSpan remainingtime = TimeSpan.FromSeconds(remaingsec);
string answer = string.Format("{0:D2}h:{1:D2}m:{2:D2}s",
                    remainingtime.Hours,
                    remainingtime.Minutes,
                    remainingtime.Seconds,
                    remainingtime.Milliseconds);

LIteral2.Text =  answer;
if (totalTime == finish)
{
     lnkFinish_Click(sender, e);
     Response.Redirect(@"~/Error.aspx");
}

请参考此链接:http://www.c-sharpcorner.com/UploadFile/babzi.naaz/3800/?ArticleID=c62a44ff-87cb-4a00-9956-8ed42bc4ce31 - MAC
3个回答

1

我的意见是使用JavaScript进行倒计时(也可以嵌入),并通过JSON传递您的数据库数据。当数据库断开连接时,您可以将一些数据传递给JavaScript,并使用控件进行倒计时。

下载以下JavaScript文件并将其放入您的Web应用程序目录中: http://scripts.hashemian.com/js/countdown.js

然后使用类似于这样的代码:

<script type="text/javascript">
        TargetDate = "12/25/207 12:01 AM";
        BackColor = "red";
        ForeColor = "white";
        CountActive = true;
        CountStepper = -1;
        LeadingZero = true;
        DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
        FinishMessage = "It is here!";
    </script>

1

我认为最好在表格中添加一个字段,并设置问题的总时间,并且每15/30秒(根据所需频率)更新一次该字段,在每次更新时从总时间中减去15/30秒。并重复此过程,直到该字段的值> 0。

为此,您可以借助计时器(JavaScript计时器)和ajax来发送请求以更新该字段。

使用ajax,我认为最好创建一个web服务(将更新该字段的值),并根据javascript计时器的基础上使用ajax进行调用。当然您也可以使用ajax计时器。

Javascript计时器参考:

http://dotnetacademy.blogspot.com/2010/09/timer-in-javascript.html


是的,这可能是JavaScript和服务器始终知道对方正在运行的最佳方式。但是,您需要注意用户可以禁用JavaScript,恶意用户可以发送虚假请求到Web服务。 - tster

0

您可以使用Windows注册表来存储计数器。


同时,我认为现在不鼓励使用注册表来处理这些事情。 - tster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接