Обновите две панели обновления одновременно - PullRequest
4 голосов
/ 01 апреля 2011

У меня есть две панели обновления ASP.NET AJAX. Есть два таймера с различными интервалами. Возможно ли одновременно обновить две панели обновления? как многопоточное приложение. каждый должен быть UpdatePanel Update в отдельном потоке за один раз. я написал этот код, но второй таймер не работает:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to ASP.NET!
    </h2>
    <p>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
    </p>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
        <ContentTemplate>
            <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Timer ID="Timer1" runat="server" Interval="2000">
    </asp:Timer>
    <asp:Timer ID="Timer2" runat="server" Interval="2000">
    </asp:Timer>
</asp:Content>

Позади кода:

  Protected Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick
            Label1.Text = Date.Now
        End Sub

        Protected Sub Timer2_Tick(sender As Object, e As System.EventArgs) Handles Timer2.Tick
            Label2.Text = Date.Now
        End Sub

1 Ответ

5 голосов
/ 01 апреля 2011

На самом деле ваши UpdatePanels в этом примере бесполезны, потому что ваши таймеры вне из них.В результате каждый раз, когда ваше событие запускается, оно выполняет полное обновление страницы.(Это отчасти потому, что вы никогда не увидите срабатывания второго таймера - к моменту срабатывания первого таймера обновляется вся страница, поэтому счетчик сбрасывается при первом таймере)

Итак, вам нужновыполнить две вещи, чтобы исправить вашу страницу:

  1. Настройте UpdatePanels для правильной работы с таймерами, чтобы выполнялись только асинхронные обратные передачи.
  2. Убедитесь, чтокаждый таймер вызывает обновление только одной панели обновления.

О первом можно позаботиться, переместив таймер в UpdatePanel, как дочерний элемент, или используя элемент <asp:Triggers>, чтобы сказать «Единственное, что обновит мою UpdatePanel, - это таймер».

О втором можно позаботиться, установив атрибут UpdateMode=Conditional на каждой UpdatePanel.

Попробуйтеэто:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to ASP.NET!
    </h2>
    <p>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
    </p>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer1" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer2" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:Timer ID="Timer1" runat="server" Interval="2000" ontick="Timer1_Tick">
    </asp:Timer>
    <asp:Timer ID="Timer2" runat="server" Interval="2000" ontick="Timer2_Tick">
    </asp:Timer>
</asp:Content>

Я должен бежать на работу сейчас, так что терпите меня, если у вас есть какие-либо вопросы; -)

...