Vanaja Dasi Ответов: 1

Я хочу получить время из базы данных на элемент управления таймером ASP.NET для онлайн-экзаменационной работы.


I want fetch the time from database onto a timer control asp.net for online exam paper.

это дает выход, так как количество минут осталось 119.
не понимаю, как это время пришло.
плз, помогите с этим.
заранее благодарю.

Что я уже пробовал:

<asp:ScriptManager runat="server" ID="Scrptmangr"></asp:ScriptManager>
                    <asp:Timer ID="timer1" runat="server" Interval="100" OnTick="timer1_Tick"></asp:Timer>
                    <asp:UpdatePanel runat="server" ID="Updatepanel">


                        <ContentTemplate>
                            <asp:Label ID="lblTimer" runat="server"></asp:Label>
                        </ContentTemplate>
                        <Triggers>
                            <asp:AsyncPostBackTrigger ControlID="timer1" EventName="tick" />
                        </Triggers>

                    </asp:UpdatePanel>



protected void timer1_Tick(object sender, EventArgs e)
       {
           if (0 > DateTime.Compare(DateTime.Now,
       DateTime.Parse(Session["timeout"].ToString())))
           {
               lblTimer.Text = "Number of Minutes Left: " +
               ((Int32)DateTime.Parse(Session["timeout"].
               ToString()).Subtract(DateTime.Now).TotalMinutes).ToString();
           }
       }

[no name]

"я не понимаю, как пришло это время", - почему бы и нет? Что показал вам отладчик, когда вы прошли через свой код?

1 Ответов

Рейтинг:
1

OriginalGriff

Начните с того, что посмотрите на свой код и подумайте о том, что вы делаете. Что вы хранили в сеансе для начала и когда вы его храните?
Если вы храните его как что - то иное, чем значение DateTime, то это глупо-и если вы храните его как DateTime, зачем возиться с ним? Просто приведите его к дате и времени, когда вы извлекаете его из сеанса:

protected void timer1_Tick(object sender, EventArgs e)
    {
    DateTime now = DateTime.Now;
    DateTime end = (DateTime)Session["timeout"];
    if (now < end)
        {
        lblTimer.Text = string.Format("Number of Minutes Left: {0}", (end - now).TotalMinutes);
        }
    }
Но ... хранение этого в сеансе вряд ли сработает: сеанс доступен только до тех пор, пока он не истечет на сервере, который по умолчанию равен 20 минутам, и не рекомендуется продлевать его, так как каждый сеанс потребляет ресурсы (некоторые хостинговые службы не позволяют вам продлить сеанс, а некоторые сокращают его до пяти минут или меньше). Я бы предложил хранить его в подлинной базе данных, когда они входят в экзаменационную систему, так как это, по крайней мере, не подлежит временным ограничениям.

Как я догадываюсь, ваш лимит времени экзамена составляет 2 часа, и вы устанавливаете это в событии загрузки страницы, поэтому оно всегда отображается как 119 - загрузка страницы происходит на всех постбэках, а также на одной первой загрузке. Но без доступа к вашему коду мы не можем быть уверены.
Я бы все равно не стал делать это с C# - я бы сделал Бегущий дисплей с Javascript, со значением "master check" в БД на случай обмана.