C#如何在Timer.Tick事件上引发PostBack?

时间:2009-07-11 17:45:28

标签: c# asp.net postback timer

我在里面使用带有DataList元素的UpdatePanel。我想每10个secunds更新DB中的内容。我注意到只有在回发后才会发生更新。我做了像

这样的代码
    <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, "");
    }

3 个答案:

答案 0 :(得分:3)

请记住,所有代码隐藏仅在服务器上执行。因此,如果Timer1_Tick()方法正在运行,那么你的Timer 提出了一个PostBack。

你得到运行该方法的StackOverflowException的原因是因为它无限地调用自身。您需要将更新代码放在该方法中,而不是以递归方式再次调用它。

答案 1 :(得分:0)

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

答案 2 :(得分:-3)

protected void Timer1_Tick(object sender, EventArgs e)
{
    lstComputers.DataBind();
}

解决了数据重装的问题