在计时器刻度上更改PlaceHolders可见性

时间:2014-02-05 01:59:00

标签: c# asp.net placeholder

我正在编写一个设置为在电视屏幕上自行运行的仪表板。我是asp.net的新手(通常做php)所以我只想拥有3个占位符,我想在asp计时器上浏览。我试图通过占位符上的visibility属性来执行此操作。我目前无法让它实际上在计时器上滚动我认为我需要一些方法将值传递给后面的代码,但我不确定如何做到这一点。任何帮助将不胜感激。

注意:onpage_load工作正常(显示panel1),第一个tick_event也可以工作(隐藏panel1并显示panel2)但是后来我遇到了面板2,页面也没有从那里移动。

<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();
    }
}

1 个答案:

答案 0 :(得分: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();

}