I have an ASP.NET web page with two postback events and the second one is aborting the first. The second one then doesn't render as expected once it completes.
In Detail
I have an ASP.NET web page that effectively contains two link buttons. It uses the Telerik ASP.NET AJAX controls, but I'm not sure if the behaviour is specfic to these controls:
The Page - an extremely cut-down version is as follows:
<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"/>
The UserControl "X" - an extremely cut-down version is as follows:
<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server"
LoadingPanelID="LoadingPanel1" RenderMode="Block">
<asp:LinkButton runat="server" ID="CausePostbackButton"
Style="display: none" />
</telerik:RadAjaxPanel>
Use Case #1 - successful
- The page loads and a JavaScript timer within Control "X" activates a postback on the LinkButton "CausePostbackButton" [eval(__doPostBack(postbackButtonClientID,''));]. (So, this mimics a user clicking the button).
- The AJAX call goes to the Server and n seconds later it returns and results in the page updating in a particular way.
- The user then clicks the LinkButton "btnShowItems" which causes a post-back to the Server and n' seconds later it returns and results in the page updating in a particular way.
Use Case #2 - failure
-
The page loads and a JavaScript timer within Control "X" activates a postback on the LinkButton "CausePostbackButton". (So, this mimics a user clicking the button).
-
Before the server has time to respond, the User clicks on the LinkButton "btnShowItems".
-
In FireFox/Firebug, you can see that the first post-back event is "Aborted". The second post-back event completes (you can see the time taken reported) but the page is not visually updated.
-
If the "manual" button is then clicked again, then that works as expected.
My thoughts
-
I know that JavaScript is single threaded, so if events can't be run immediately then they are queued.
-
I know that if a timer fires an event that is queued and then fires the same event whilst the first event is still queued, then one of these events (the second?) will be dropped.
-
This is acting as if the first event is being trashed, but then the second event can no longer find its "channel" to write to.
However, if I change the "manual" Link Button to an Image Button then the behaviour does not change.
Any ideas what the problem is (and ideally a solution)?
Many thanks in advance
Griff
submitted by bmcmillen