1

ajax タイマーを実装したいオンライン試験 Web サイトを作成しました。私はコードを書きましたが、問題は、タイマーの秒数を10秒と仮定してセッションを初期化していることです。ページが読み込まれると、6 秒から表示されます。そのため、ページのプリレンダリングが完了すると、タイマーがすでに開始されているように感じます。そのため、10 秒ではなく 6 秒から表示されます

これがコードです。10秒から表示する方法を誰かが提案できれば、それは素晴らしいことです。

aspx ファイル コード

<body>
<form id="form1" runat="server">
<div>
    <asp:ScriptManager ID="ScriptManager1" runat="server">

    </asp:ScriptManager>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick">
        </asp:Timer>
           <asp:Label ID="Label1" runat="server" Text="Remaining Time :"></asp:Label>&nbsp;<asp:Label ID="lblTime" runat="server" Text=""></asp:Label>
    </ContentTemplate>
    </asp:UpdatePanel>        
</div>
</form>

csファイルコード

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session["time"] = DateTime.Now.AddSeconds(10);
    }
}

protected void Timer1_Tick(object sender, EventArgs e)
{
    if (lblTime.Text != "TimeOut!")
    {
        TimeSpan time1 = new TimeSpan();
        time1 = (DateTime)Session["time"] - DateTime.Now;
        if (time1.Seconds <= 0)
        {
            lblTime.Text = "TimeOut!";
            ScriptManager.RegisterStartupScript(this, this.GetType(), "StartUpScript1", "alert('hello')", true);

        }
        else
        {
            lblTime.Text = time1.Hours.ToString("#00") + ":" + time1.Minutes.ToString("#00") + ":" + time1.Seconds.ToString("#00");
        }
    }
    else
    {
        //Timer1.Interval = 0;
    }
}
4

1 に答える 1

0

次に、値をセッションに保存しますが、値は変更されません。
ページが読み込まれ、時間がすでに設定されています。ロード後、Timer は Ajax 呼び出しを に送信し、Timer1_Tick古い時刻を取得します。

Timer1_Tick次のように、メソッドの Time 設定のコードを移動する必要があります。

protected void Timer1_Tick(object sender, EventArgs e)
{
    if (Session["time"] == null)
        Session["time"] = DateTime.Now.AddSeconds(10);

他のアプローチは、カウントダウン タイマーに javascript または jqueryを使用することです。これは通常どおり機能しますが、サーバーへのページ ポストバックが削除されます。

于 2012-11-15T07:01:45.923 に答える