【问题标题】:Change PlaceHolders visibility on timer tick在计时器滴答声中更改 PlaceHolders 可见性
【发布时间】:2014-03-01 07:05:31
【问题描述】:

我正在编写一个设置为在电视屏幕上自行运行的仪表板。我对asp.net(通常做php)相当陌生,所以我有3个占位符,我想在asp计时器上滚动。我试图通过占位符上的可见性属性来做到这一点。我目前无法让它在计时器上真正滚动我认为我需要一些方法将值传回给后面的代码,但我不确定如何做到这一点。任何帮助将不胜感激。

注意:onpage_load 工作正常(显示面板 1),第一个 tick_event 也工作(隐藏面板 1 并显示面板 2)但随后我卡在面板 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();
    }
}

【问题讨论】:

    标签: c# asp.net placeholder


    【解决方案1】:

    你快到了。计时器代码和一切工作正常,但请记住,每次计时器触发时都会引发 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();
    
    }
    

    【讨论】:

    • 我试过你的解决方案似乎不起作用(尝试了几种不同的方法),因为我已经能够从 on_page 加载(显示 panel1)滚动到 Tick 事件(隐藏 panel1 和显示 panel2) 然后它会停留在面板 2 并在那里循环停止。
    • 我将修改我的答案并发布我使用的完整代码。它只是稍微优化了一下,但它确实对 if/else 结构进行了更改,因此可能已经完成了。
    • 其实你的 OnTick 事件代码没问题(我刚刚测试过)。您将这两行添加到 OnLoad 事件中,对吗?
    • 感谢您的帮助,现在发现其他东西正在破坏它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多