2014-02-05 2 views
0

Я пишу приборную панель, которая настроена на запуск на экране телевизора. Я довольно новичок в asp.net (обычно делаю php), поэтому просто у меня есть 3-хместные держатели, которые я бы хотел прокрутить по таймеру asp. Я пытаюсь сделать это через атрибут видимости на заполнителе. У меня в настоящее время возникают проблемы с тем, чтобы он действительно просматривал таймер. Мне кажется, что мне нужно каким-то образом передать значения в код, но я не уверен, как это сделать. Любая помощь будет оценена по достоинству.Change PlaceHolders visibility on timer tick

Примечание: onpage_load работает отлично (показывает панель1), а первый tick_event также работает (скрывает панель 1 и показывает панель2), но затем я застреваю на панели 2, и страница не перемещается оттуда.

Page

<asp:Content ID="MainContent" runat="server" ContentPlaceHolderID="MainContent"> 
    <div class='container_12' id='content'> 
    <asp:UpdatePanel ID="UPmaincontent" runat="server" visible="true" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <asp:PlaceHolder ID="Panel1" visible="false" runat="server"> 
        <div class='grid_12' id='Emailbreakdown'> 
        </div> 
      </asp:PlaceHolder> 
      <asp:PlaceHolder ID="Panel2" visible="false" runat="server"> 
        <div class='grid_12' id='WObreakdown'> 
        </div> 
      </asp:PlaceHolder> 
      <asp:PlaceHolder ID="Panel3" visible="false" runat="server"> 
        <div class='grid_12' id='IRbreakdown'> 
        </div> 
      </asp:PlaceHolder> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <div class='clear'>&nbsp;</div> 
<asp:Timer ID="Tmaincontent" runat="server" Interval="10000" OnTick="Tmaincontent_Tick"></asp:Timer> 
</div> 

Код За

protected void Page_Load(object sender, EventArgs e) 
{ 
    Panel1.Visible = true; 
    Panel2.Visible = false; 
    Panel3.Visible = false; 
} 
public void Tmaincontent_Tick(object sender, EventArgs e) 
{ 
    if (Panel1.Visible == true) 
    { 
     Panel1.Visible = false; 
     Panel2.Visible = true; 
     Panel3.Visible = false; 
     UPmaincontent.Update(); 
    } 
    else if (Panel2.Visible == true) 
    { 
     Panel1.Visible = false; 
     Panel2.Visible = false; 
     Panel3.Visible = true; 
     UPmaincontent.Update(); 
    } 
    else 
    { 
     Panel1.Visible = true; 
     Panel2.Visible = false; 
     Panel3.Visible = false; 
     UPmaincontent.Update(); 
    } 
} 

ответ

0

Вы почти там. Код таймера и все работает правильно, но помните, что он будет вызывать событие PostBack каждый раз, когда срабатывает таймер, и это приводит к тому, что метод Page_OnLoad запускается перед Tmaincontent_Tick, таким образом, каждый раз сбрасывая ваши панели. В принципе, вы застряли в цикле, где Panel1 всегда настроен на Visible, а затем Panel2 устанавливается на Visible, поэтому он никогда не сможет добраться до трех.

Вот простое исправление:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
     return; 

    Panel1.Visible = true; 
    Panel2.Visible = false; 
    Panel3.Visible = false; 
} 


public void Tmaincontent_Tick(object sender, EventArgs e) 
{ 
    if (Panel1.Visible) 
    { 
     Panel1.Visible = false; 
     Panel2.Visible = true; 
     Panel3.Visible = false; 
     UPmaincontent.Update(); 
     return; 
    } 

    if (Panel2.Visible) 
    { 
     Panel1.Visible = false; 
     Panel2.Visible = false; 
     Panel3.Visible = true; 
     UPmaincontent.Update(); 
     return; 
    } 

    Panel1.Visible = true; 
    Panel2.Visible = false; 
    Panel3.Visible = false; 
    UPmaincontent.Update(); 

} 
+0

Я попробовал ваше решение, похоже, не работает (пробовал это несколько способов), как я был в состоянии свернуть с on_page нагрузки (с указанием ПАНЕЛЬ1) к Отметьте событие (которое скрыло панель1 и показало панель2), тогда оно просто останется на панели 2 и остановится там в цикле. – user1448215

+0

Я пересмотрю свой ответ и опубликую полный код, который я использовал. Он был слегка оптимизирован, но у него были изменения в структуре if/else, чтобы это могло произойти. –

+0

Собственно, ваш код для события OnTick в порядке (я просто его протестировал). Вы добавили две строки в событие OnLoad, правильно? –