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でDBデータを渡します。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>
于 2010-11-16T22:58:51.220 に答える
0

Windowsレジスターを使用してカウンターを保管できます。

于 2010-11-18T05:18:11.033 に答える