C # Как поднять PostBack на событие Timer.Tick? - PullRequest
0 голосов
/ 11 июля 2009

Я использую UpdatePanel с элементом DataList внутри. Я хочу обновлять содержимое из БД каждые 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, "");
    }

Ответы [ 3 ]

3 голосов
/ 11 июля 2009

Помните, что весь ваш код выполняется только на сервере. Поэтому, если метод Timer1_Tick () запущен, то ваш таймер равен , поднимая PostBack.

Причина, по которой вы получаете StackOverflowException при запуске этого метода, заключается в том, что он просто вызывает себя бесконечно. Вам нужно поместить свой код обновления в этот метод, а не вызывать его снова рекурсивно.

0 голосов
/ 11 июля 2009
protected void Timer1_Tick(object sender, EventArgs e)
{
    lstComputers.DataBind();
}

Решена проблема с перезагрузкой данных

0 голосов
/ 11 июля 2009

Посмотрите на функции javascript setTimeout () и setInterval (). Все это должно происходить на клиенте, а не на стороне сервера.

...