Как сделать таймер обратного отсчета в asp.net веб-приложение (c#)?

Я создаю временный онлайн-тест в 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");
}

3 ответов


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

загрузите следующий файл 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>

Я думаю, что лучше взять поле в таблице и установить общее время для вопроса в нем и обновить это поле каждые 15/30 секунд (в соответствии с требуемой частотой) и на каждом обновлении вычесть значение 15/30 секунды от общего времени. и делайте это до тех пор, пока поле не будет иметь значение > 0.

для этого вы можете воспользоваться помощью timer (JavaScript timer) и ajax. отправить запрос на сервер для обновления этого поля.

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

ссылка на таймер javascript:

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


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