我有两个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
答案 0 :(得分:5)
实际上,您的UpdatePanel在此示例中没用,因为您的计时器在之外。因此,每次触发事件时,都会刷新整页。 (这就是为什么你永远不会看到第二个定时器被击中的原因 - 到第一个定时器被击中时,整个页面都会被刷新,所以计数器会在第一个定时器上重置)
因此,您需要完成两件事来修复您的页面:
第一个可以通过将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>
我现在必须跑去上班,所以如果你有任何问题请耐心等待; - )