我有一个带有两个回发事件的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 - 成功
使用案例#2 - 失败
页面加载并且控件“X”中的JavaScript计时器激活LinkButton“CausePostbackButton”上的回发。 (因此,这模仿用户点击按钮)。
在服务器有时间回复之前,用户点击了LinkButton“btnShowItems”。
在FireFox / Firebug中,您可以看到第一个回发后事件是“已中止”。第二个回发后事件完成(您可以看到报告的时间),但页面未在视觉上更新。
如果再次点击“手动”按钮,则按预期工作。
我的想法
我知道JavaScript是单线程的,所以如果事件无法立即运行,那么它们就会排队。
我知道如果一个计时器触发一个排队的事件,然后在第一个事件仍然排队时触发相同的事件,那么这些事件之一(第二个?)将被删除。
这就像第一个事件被删除一样,但第二个事件再也找不到要写入的“频道”了。
但是,如果我将“手动”链接按钮更改为图像按钮,则行为不会改变。
任何想法是什么问题(理想情况下是解决方案)?
非常感谢提前
格里夫
答案 0 :(得分:3)
正如迪克兰帕德所说,我们直接联系了Telerik。他们立即提出了解决方案:
按照设计,如果您在接收第一个响应之前尝试启动另一个请求,则ASP.NET AJAX Framework会取消正在进行的ajax请求。将RadAjaxPanel的RequestQueueSize设置为3,例如......
那很有用!