同时更新两个更新面板

时间:2011-04-01 11:47:31

标签: asp.net asp.net-ajax updatepanel

我有两个ASP.NET AJAX UpdatePanel。 有两个不同间隔的定时器。 是否可以同时更新两个更新面板? 像多线程应用程序。 每个应该在一次单独的线程中更新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">
        <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 个答案:

答案 0 :(得分:5)

实际上,您的UpdatePanel在此示例中没用,因为您的计时器之外。因此,每次触发事件时,都会刷新整页。 (这就是为什么你永远不会看到第二个定时器被击中的原因 - 到第一个定时器被击中时,整个页面都会被刷新,所以计数器会在第一个定时器上重置)

因此,您需要完成两件事来修复您的页面:

  1. 让UpdatePanel与Timers一起正常工作,以便只发生异步回发。
  2. 确保每个Timer仅导致一个UpdatePanel刷新。
  3. 第一个可以通过将Timer移动到UpdatePanel,作为孩子,或者使用<asp:Triggers>元素基本上说“来解决这个问题。唯一能更新我的UpdatePanel的是这个计时器“。

    可以通过在每个UpdatePanel上设置UpdateMode=Conditional属性来处理第二个问题。

    试试这个:

    <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>
    

    我现在必须跑去上班,所以如果你有任何问题请耐心等待; - )