На самом деле ваши UpdatePanels в этом примере бесполезны, потому что ваши таймеры вне из них.В результате каждый раз, когда ваше событие запускается, оно выполняет полное обновление страницы.(Это отчасти потому, что вы никогда не увидите срабатывания второго таймера - к моменту срабатывания первого таймера обновляется вся страница, поэтому счетчик сбрасывается при первом таймере)
Итак, вам нужновыполнить две вещи, чтобы исправить вашу страницу:
- Настройте UpdatePanels для правильной работы с таймерами, чтобы выполнялись только асинхронные обратные передачи.
- Убедитесь, чтокаждый таймер вызывает обновление только одной панели обновления.
О первом можно позаботиться, переместив таймер в 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>
Я должен бежать на работу сейчас, так что терпите меня, если у вас есть какие-либо вопросы; -)