ASP.NET AJAX回发中止

时间:2011-07-27 18:09:34

标签: javascript asp.net-ajax telerik asplinkbutton

我有一个带有两个回发事件的ASP.NET网页,第二个是中止第一个。第二个一旦完成就不会按预期呈现。

详情

我有一个ASP.NET网页,它实际上包含两个链接按钮。它使用Telerik ASP.NET AJAX控件,但我不确定这些控件的行为是否特定:

网页 - 极为简洁的版本如下:

<telerik:RadToolTipManager ID="RadToolTipManager1" runat="server"
  Position="BottomLeft" RelativeTo="Element" ShowEvent="OnClick" 
  HideEvent="ManualClose" Animation="Fade" OnAjaxUpdate="OnShowItems" >  
     <TargetControls>
          <telerik:ToolTipTargetControl TargetControlID="btnShowItems" />
     </TargetControls>
</telerik:RadToolTipManager>
...
...
<asp:LinkButton ID="btnShowItems" runat="server" Visible="false">
     <span><%= ItemsPrompt %></span>
</asp:LinkButton>
...
...
<uc1:X ID="XControl" runat="server"/>

UserControl“X” - 极为简洁的版本如下:

<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server"
  LoadingPanelID="LoadingPanel1" RenderMode="Block">
    <asp:LinkButton runat="server" ID="CausePostbackButton" 
      Style="display: none" />
</telerik:RadAjaxPanel>

使用案例#1 - 成功

  1. 页面加载并且控件“X”中的JavaScript计时器激活LinkBut​​ton“CausePostbackButton”[eval(__ doPostBack(postbackButtonClientID,''));]上的回发。 (因此,这模仿用户点击按钮)。
  2. AJAX呼叫进入服务器, n 秒后它返回并导致以特定方式更新页面。
  3. 然后,用户单击LinkBut​​ton“btnShowItems”,这会导致回发到服务器,并且 n'秒后它会返回并导致以特定方式更新页面。
  4. 使用案例#2 - 失败

    1. 页面加载并且控件“X”中的JavaScript计时器激活LinkBut​​ton“CausePostbackButton”上的回发。 (因此,这模仿用户点击按钮)。

    2. 在服务器有时间回复之前,用户点击了LinkBut​​ton“btnShowItems”。

    3. 在FireFox / Firebug中,您可以看到第一个回发后事件是“已中止”。第二个回发后事件完成(您可以看到报告的时间),但页面未在视觉上更新。

    4. 如果再次点击“手动”按钮,则按预期工作。

    5. 我的想法

      • 我知道JavaScript是单线程的,所以如果事件无法立即运行,那么它们就会排队。

      • 我知道如果一个计时器触发一个排队的事件,然后在第一个事件仍然排队时触发相同的事件,那么这些事件之一(第二个?)将被删除。

      • 这就像第一个事件被删除一样,但第二个事件再也找不到要写入的“频道”了。

      但是,如果我将“手动”链接按钮更改为图像按钮,则行为不会改变。

      任何想法是什么问题(理想情况下是解决方案)?

      非常感谢提前

      格里夫

1 个答案:

答案 0 :(得分:3)

正如迪克兰帕德所说,我们直接联系了Telerik。他们立即提出了解决方案:

按照设计,如果您在接收第一个响应之前尝试启动另一个请求,则ASP.NET AJAX Framework会取消正在进行的ajax请求。将RadAjaxPanel的RequestQueueSize设置为3,例如......

那很有用!