2010-11-11 11 views
6

Sto creando un test online a tempo in C# asp.net. L'ho creato utilizzando l'ora locale della macchina. Tuttavia, nel caso di disconnessione del database o blocco del sistema, il timer per il conto alla rovescia deve iniziare dall'istante in cui la macchina si è impigliata o in caso di disconnessioni impreviste del database. Ad esempio, l'utente sta rispondendo alle domande per 10 minuti e imprevisto. Dopo il recupero il conto alla rovescia deve iniziare da 10 minuti. Qualcuno può aiutarmi con la codifica in C#? Ho usato la seguente codifica, ma non è utile nello scenario sopra.Come fare un conto alla rovescia in un'applicazione web 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

Fare riferimento a [questo] (http://www.c-sharpcorner.com/UploadFile/babzi.naaz/3800/?ArticleID=c62a44ff-87cb-4a00-9956-8ed42bc4ce31) link – MAC

risposta

1

La mia opinione è quella di utilizzare javascript per il conto alla rovescia (incorporato come bene) e per passare i dati DB con JSON, quando DB causa di disconnessione si passa alcuni dati a javascript e con un controllo si procede al conto alla rovescia.

scaricare il seguente file javascript e messo nella directory di applicazioni web: http://scripts.hashemian.com/js/countdown.js

E di usare qualcosa di simile a questo:

<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

Credo che il suo meglio per fare un campo nella tabella e impostare il tempo totale per la domanda in essa e aggiornare tale campo su ogni 15/30 secondi (secondo la vostra frequenza richiesta) e su ogni aggiornamento sottrarre il valore 15/30 secondi dal tempo totale. e fatelo fino a quando il campo ha valore> 0.

per questo è possibile prendere l'aiuto di timer (timer javascript) e ajax. per inviare una richiesta al server per aggiornare quel campo.

con ajax penso sia meglio creare un webservice (che aggiornerà il valore di quel campo) e chiamarlo utilizzando ajax su base di timer javascript. bene puoi anche usare il timer ajax.

javascript riferimento timer:

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

+0

Sì, questo è probabilmente il migliore modo per il javascript e il server per sapere sempre che l'altro è in esecuzione. Tuttavia, devi essere consapevole che un utente può disabilitare javascript e un utente malintenzionato può inviare richieste false al servizio web. – tster

0

È possibile utilizzare le finestre registery per memorizzare il contatore.

+0

Non da una pagina Web ... Inoltre, penso che l'uso del registro per queste cose sia disapprovato in questi giorni. – tster

Problemi correlati