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");
}
4

3 回答 3

1

我认为最好在表格中获取一个字段并在其中设置问题的总时间,并每 15/30 秒(根据您所需的频率)更新该字段,并且在每次更新时从总时间中减去 15/30 秒的值。并执行此操作,直到该字段的值 > 0。

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

使用 ajax 我认为最好创建一个 web 服务(它将更新该字段的值)并基于 javascript 计时器使用 ajax 调用它。那么你也可以使用ajax计时器。

javascript计时器参考:

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

于 2010-11-11T05:34:29.150 回答
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>
于 2010-11-16T22:58:51.220 回答
0

You can use windows registery to store the counter.

于 2010-11-18T05:18:11.033 回答