ASP.NET Webアプリケーション(C#)でカウントダウンタイマーを作成する方法は?
-
08-10-2019 - |
質問
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");
}
解決
私の意見では、JavaScriptをカウントダウンに使用し(埋め込まれています)、DBデータをJSONで渡すことです。DBが切断を引き起こすと、データを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>
他のヒント
テーブルにフィールドを取得し、質問の合計時間を設定し、15/30秒ごと(必要な頻度に従って)にそのフィールドを更新する方が良いと思います。フィールドに値が> 0になるまでこれを行います。
このために、タイマー(JavaScriptタイマー)とAjaxのヘルプを取ることができます。そのフィールドを更新するためにサーバーにリクエストを送信します。
Ajaxを使用すると、Webサービス(そのフィールドの値を更新する)を作成し、JavaScriptタイマーに基づいてAjaxを使用して呼び出す方が良いと思います。さて、Ajaxタイマーも使用できます。
JavaScriptタイマーリファレンス:
http://dotnetacademy.blogspot.com/2010/09/timer-in-javascript.html
Windows Registeryを使用してカウンターを保存できます。