【问题标题】:C# How to raise PostBack on Timer.Tick event?C#如何在 Timer.Tick 事件上引发 PostBack?
【发布时间】:2009-07-11 17:45:27
【问题描述】:

我使用带有 DataList 元素的 UpdatePanel。我想每 10 秒更新一次数据库中的内容。我注意到更新仅在回发之后发生。我做了类似的代码

    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
        </Triggers>
        <ContentTemplate>
                <asp:DataList ID="lstComputers" runat="server" DataKeyField="ComputerID" DataSourceID="ComputersDataSource"
                    OnItemDataBound="lstComputers_ItemDataBound" OnItemCommand="lstComputers_ItemCommand">
                    <HeaderTemplate>

                    // Header data

                    </HeaderTemplate>
                    <ItemTemplate>

                    // Item template

                    </ItemTemplate>
                </asp:DataList>

                        <asp:UpdateProgress ID="UpdateProgress2" runat="server">
                            <ProgressTemplate>
                                <img border="0" src="images/loading.gif" />
                            </ProgressTemplate>
                        </asp:UpdateProgress>

        </ContentTemplate>
    </asp:UpdatePanel>

在后面的代码中,我尝试使用RaisePostBackEvent 方法,但出现堆栈溢出异常...

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        this.RaisePostBackEvent(Timer1, "");
    }

【问题讨论】:

    标签: c# asp.net postback timer


    【解决方案1】:

    请记住,您的所有代码隐藏都仅在服务器上执行。因此,如果 Timer1_Tick() 方法正在运行,那么您的 Timer 正在引发 PostBack。

    运行该方法时出现 StackOverflowException 的原因是它只是无限地调用自身。您需要将更新代码放在该方法中,而不是再次递归调用它。

    【讨论】:

      【解决方案2】:

      看看 setTimeout() 和 setInterval() javascript 函数。这一切都需要发生在客户端,而不是服务器端。

      【讨论】:

        【解决方案3】:
        protected void Timer1_Tick(object sender, EventArgs e)
        {
            lstComputers.DataBind();
        }
        

        解决了数据重新加载的问题

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-22
          • 1970-01-01
          • 1970-01-01
          • 2011-09-03
          • 1970-01-01
          • 1970-01-01
          • 2016-09-30
          • 1970-01-01
          相关资源
          最近更新 更多