не могу обновить метку используя таймер - PullRequest
0 голосов
/ 07 января 2012

У меня есть главная страница, которая использует диспетчер скриптов, а на другой странице я хочу показать цифровые часы, которые отсчитывают от 0 до 10 минут.код asp.net:

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
</asp:ScriptManagerProxy>
<asp:Timer ID="Timer1" runat="server" Interval="5000" ontick="Timer1_Tick">
    </asp:Timer>    
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
<ContentTemplate>
 <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>

код C #:

int min=0,sec=0;
 protected void Timer1_Tick(object sender, EventArgs e)
 { 
    if (sec == 55)
    {
        min = min + 1;
        sec = 0;
    }
    else
    {
        sec = sec + 5;
    }
    Label1.Text = min.ToString() +":"+ sec.ToString();
    if(min==10&&sec==0)
    {
        Timer1.Enabled=false;
        Label1.Text = "clock over!";
    }

страница начинается с 0: 5 и не изменяется вообще.Укажите, есть ли ошибка в коде d!

1 Ответ

1 голос
/ 07 января 2012

Спорим, это будет ваша панель обновлений. Для отладки

  1. Попробуйте вообще без панели upadte - работает ли тогда
  2. Поставьте таймер на панель обновлений и забудьте о триггере

На самом деле пункт 2 можно было бы выполнить в любом случае - я не уверен в преимуществе использования его в качестве триггера обратной передачи. Это было бы так же хорошо с таймером внутри

1012 * Тем не менее *

Честно говоря, я бы этого не делал. Не будет ли метод Tick выполнять постбэк (хотя и частичный) только для запуска отображения таймера.

Существует множество свободно доступных компонентов, которые будут работать исключительно на стороне клиента, что будет намного более эффективным, например,

Таймер JQuery

EDIT

На самом деле, я думаю, что заметил проблему. Это то, как вы записываете минуты и секунды. Они находятся в переменных и будут сбрасываться при каждой обратной передаче (отметка таймера). Вам нужно будет хранить их во что-то, что могло бы быть постбэком, например ViewState

protected void Timer1_Tick(object sender, EventArgs e)  {  

   ViewState["min"] //not int min
   ViewState["sec"] //not int sec

   //.. you would need to use Convert (or Int32.Parse) to get 
   //.. then as an int to work with

}

Но по-домашнему - все равно не делай этого. Используйте компонент JQuery или аналогичный

...