Счетчик ASP.NET Ajax Timer показывает неправильное значение

Я создал веб-сайт онлайн-экзамена, на котором я хочу реализовать таймер ajax. Я написал код, но проблема в том, что я инициализирую сеанс с добавлением количества секунд для таймера, предположим, 10 секунд. а при загрузке страницы показывает с 6 сек. Поэтому я чувствую, что когда предварительный рендеринг страницы завершается, таймер уже запущен, поэтому он показывает с 6 секунд вместо 10 секунд.

Это код. Если кто-нибудь может предложить, как отображать от 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 file code

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;
    }
}

person Ashok Kumar Bhuyan    schedule 15.11.2012    source источник
comment
Есть ответ на ответ?   -  person VMAtm    schedule 15.11.2012


Ответы (1)


Затем вы сохраняете значения в Session, они не изменяются.
Ваша страница загружается, и время уже установлено. После загрузки Timer отправляет вызов Ajax на Timer1_Tick и получает устаревшее время.

Вам нужно переместить свой код для настройки времени в метод Timer1_Tick, например:

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

Другой подход заключается в использовании javascript или jquery для таймеров обратного отсчета. будет работать как обычно, но уберет постбэк страницы на сервер.

person VMAtm    schedule 15.11.2012