ASP.NET计时器导致AJAX工具包SliderExtender出现故障

时间:2012-05-29 22:44:17

标签: asp.net ajax ajaxcontroltoolkit

我有2个更新面板,两个更新面板都设置为UpdateMode =“Conditional”。

第一个更新面板包含:

  • 2 AJAX工具包SliderExtender
  • 2个相应的文本框

第一个更新面板将2个SliderExtender文本框的TextChanged事件设置为异步回发触发器。

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="tb_Slider1" EventName="TextChanged" />
    <asp:AsyncPostBackTrigger ControlID="tb_Slider2" EventName="TextChanged" />
</Triggers>

第二个更新面板包含:

  • 3标签
  • 间隔为1秒的计时器

第二个更新面板通过后面的代码加载标签中的文本。第二个更新面板将Timer的Tick事件设置为async post back触发器。

<Triggers>
     <asp:AsyncPostBackTrigger ControlID="tm_Timer1" EventName="Tick" />
</Triggers>

如果我在第一个更新面板中滚动任一个滑块,则第二个更新面板中的计时器会打勾;滑块自行下降,进而导致TextChanged事件触发。

为什么部分帖子会在第二个更新面板中返回,导致第一个更新面板控件做出反应?

我一直在刷新更新面板,看起来部分帖子更像是完整的帖子后备,因为它们运行所有服务器页面生命周期事件。我不确定这是否会导致滑块出现故障?

无论如何要避免这种情况吗?还是“按预期工作”?

最终我希望能够自由移动滑块,即使计时器正在滴答作响。这样定时器更新面板会经常更新,当用户放下滑块控件(即TextChanged)时,第一个更新面板将会更新。

1 个答案:

答案 0 :(得分:1)

尽管tm_Timer1未添加到第一个updatepanel的触发器集合中,但当它勾选时,提交给服务器的所有表单控件的值(包括文本框值和第一个UpdatePanel)也会刷新。您可以在ScriptManager控件之后立即添加脚本来解决此问题:

<script type="text/javascript">
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

     var realDoPostback = __doPostBack;
     __doPostBack = function (sender, args) {
          if (sender === "<%= tm_Timer1.UniqueID %>") {
               $get("<%= tb_Slider1.ClientID  %>").removeAttribute("name");
               $get("<%= tb_Slider2.ClientID  %>").removeAttribute("name");
          }
          realDoPostback(sender, args);
     }

     function endRequestHandler(sender, args) {
          $get("<%= tb_Slider1.ClientID  %>").setAttribute("name", "<%= tb_Slider1.UniqueID %>");
          $get("<%= tb_Slider2.ClientID  %>").setAttribute("name", "<%= tb_Slider2.UniqueID %>");
     }
</script>