2013-10-05 6 views
0

Что нужно сделать, это обновить ярлык каждые 5 секунд. Для этой цели я использую элемент управления UpdatePanel. Ниже разметка:Обновление значения метки после каждого интервала времени

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"> 
</asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
         <ContentTemplate> 
          <asp:Label ID="NewsFeed_Item1_Name" runat="server" Text=""></asp:Label> 
         </ContentTemplate> 
        </asp:UpdatePanel> 

На стороне сервера:

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Create a timer 
    myTimer = new System.Timers.Timer(); 
    // Tell the timer what top do when it elapses 
    myTimer.Elapsed += new ElapsedEventHandler(UpdateNewsFeed); 
    // Set it to go off every five seconds 
    myTimer.Interval = 5000; 
    // And start it   
    myTimer.Enabled = true; 
} 

private void UpdateNewsFeed(object sender, ElapsedEventArgs e) 
{ 
    //newsfeedCounter and dt are global variables 
    if (newsfeedCounter >= dt.Rows.Count) 
     newsfeedCounter = 0; 
    string name = dt.Rows[newsfeedCounter]["Name"].ToString(); 
    NewsFeed_Item1_Name.Text = name; 
    newsfeedCounter++; 
} 

Но как-то функция UpdateNewsFeed не срабатывает через каждые 5 секунд.

Что не так с вышеуказанным кодом?

+0

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

1

System.Timers.Timer не может говорить с веб-страницы; для этого вам нужно будет использовать фактический Timer control, который использует Javascript для обновления страницы с установленными вами интервалами.

Там в walkthrough on the Timer control available here

0

Просто добавьте одну строку кода:

myTimer.Start(); 

после вы его включили.

UPDATE

Почему бы вам не использовать timer_tick() событие? У вас есть пример here, это может вам помочь

+0

Произошло это, но ничего не произошло. Такая же проблема! – Azeem

+0

'timer_tick()' событие недоступно в таймерах asp.net. Это для оконных форм – Shaharyar

1

Это рабочее решение вашей проблемы. Вам просто нужно добавить следующую строку кода в Page_Load() метода:

//add timer to the webform so we can get the ControlID 
this.Form.Controls.Add(myTimer); 

//An AJAX control to update the web UI 
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger(); 

//set timer to async it 
trigger.ControlID = myTimer.UniqueID; 
trigger.EventName = "Tick";  

//now add the timer trigger to get its updates 
UpdatePanel1.Triggers.Add(trigger); 
+0

Я добавил myTimer.Start(); Все еще не работает ... – Azeem

+0

Добавьте простую строку 'Response.Write (« something »);' в ваш метод «UpdateNewsFeed», чтобы проверить, тикает ли таймер или нет. – Shaharyar

+0

да, я уже сделал это, как вам было предложено, но перенаправления не происходит. .. – Azeem

0

На веб-странице вы не можете установить таймер на стороне сервера, это должно быть сделано на клиенте, например:

  1. Установите невидимый контроль запуска (например, linkbutton без текстового набора) внутри панели обновления.
  2. В стороне сервера «OnClick» событие такого контроля добавить свой код, чтобы прочитать подачи и обновление метки
  3. В стороне клиента JavaScript использует window.setInterval функцию для вызова click() методы LinkButton каждых 5 секунд.
Смежные вопросы