2012-01-07 3 views
0

У меня есть главная страница, в которой используется менеджер сценариев, а на другой странице я хочу показать цифровые часы, которые отсчитываются от 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 и не меняется. PLS указать, если есть ошибка в коде d!

ответ

1

Моя ставка заключается в том, что это будет ваша панель обновления. Для целей отладки

  1. Try без upadte панели на всех - это работает, то
  2. Установите таймер на панели обновления и забыть о триггере

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

Однако

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

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

JQuery Timer

EDIT

На самом деле я думаю, что я заметил эту проблему. Это как вы записываете минуты и секунды. Они находятся в переменных и будут сбрасываться с каждой обратной передачи (отметка таймера). Youu нужно было бы хранить их во что-то, что могло бы переносить обратную передачу, например. 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 

} 

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

+0

эй, спасибо за совет. Я использовал функцию javascript сейчас, но единственная проблема заключается в том, что я хочу вызвать функцию C#, когда значение таймера составляет 10:00, и я не хочу отправлять значения в форму, поскольку я хочу, чтобы 2 перенаправлялся на ту же страницу. любые идеи о tht? –

+0

@YashUpadhyay вам нужно будет вызвать событие на стороне сервера asp.net из JavaScript/JQuery. Ссылка http://stackoverflow.com/questions/8771097/raise-server-side-button-click-event-from-javascript-in-ajax-call/8771155#8771155 дает действительно хорошее объяснение того, как это сделать (не мой ответ - другие ребята) –