2010-11-11 2 views
6

Я создаю временный онлайн-тест на C# asp.net.Я создал его с использованием локального машинного времени. Но в случае отключения базы данных или зависания системы таймер обратного отсчета должен начинаться с момента, когда машина повесила или неожиданно отключилась база данных. Например, пользователь отвечает на вопросы для 10 минут и неожиданно зависает в системе. После восстановления обратный отсчет должен начинаться с 10 минут. Может ли кто-нибудь помочь мне с кодировкой на C#? Я использовал следующую кодировку, но ее не полезно в приведенном выше сценарии.Как сделать таймер обратного отсчета в веб-приложении asp.net (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"); 

     } 
+0

См. [Это] (http://www.c-sharpcorner.com/UploadFile/babzi.naaz/3800/?ArticleID=c62a44ff-87cb-4a00-9956-8ed42bc4ce31) ссылка – MAC

ответ

1

Мое мнение заключается в использовании JavaScript для обратного отсчета времени (встроенный, а) и передать данные БД с JSON, когда DB причина отключения вы передаете некоторые данные JavaScript и с контролем вы обрабатываете обратный отсчет.

Загрузите следующий файл яваскрипта и поместить в каталог веб-приложения: 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 timer) и ajax. для отправки запроса на сервер для обновления этого поля.

с ajax Я думаю, что лучше создать веб-сервис (который будет обновлять значение этого поля) и называть его с помощью ajax на основе таймера javascript. хорошо вы также можете использовать таймер ajax.

Javascript опорный таймер:

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

+0

Да, это, вероятно, лучший способ для javascript и сервера всегда знать, что другой работает. Однако вам нужно знать, что пользователь может отключить javascript, а злоумышленник может отправлять поддельные запросы в веб-службу. – tster

0

Вы можете использовать окна Регистери для хранения счетчика.

+0

Не с веб-страницы .... Кроме того, я думаю, что использование реестра для этих вещей не одобряется в наши дни. – tster