У меня есть веб-страница 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 - успешный
- Страница загружается, и таймер JavaScript в элементе управления «X» активирует обратную передачу на LinkButton «CausePostbackButton» [eval (__ doPostBack (postbackButtonClientID, ''));]. (Таким образом, это имитирует пользователя, нажимающего кнопку).
- AJAX-вызов поступает на сервер, а n секунд спустя он возвращается и приводит к обновлению страницы определенным образом.
- Затем пользователь щелкает LinkButton «btnShowItems», который вызывает обратную передачу на сервер, а n ' секунд спустя возвращает и приводит к обновлению страницы определенным образом.
Вариант использования № 2 - ошибка
Страница загружается, и таймер JavaScript в элементе управления «X» активирует обратную передачу на LinkButton «CausePostbackButton». (Таким образом, это имитирует пользователя, нажимающего кнопку).
Прежде чем сервер успеет ответить, Пользователь нажимает кнопку LinkButton "btnShowItems".
В FireFox / Firebug вы можете видеть, что первое событие постбэка «Прервано». Второе событие post-back завершается (вы можете увидеть, сколько времени занято в отчете), но страница визуально не обновляется.
Если снова нажать кнопку «вручную», значит, это работает, как и ожидалось.
Мои мысли
Я знаю, что JavaScript является однопоточным, поэтому, если события не могут быть запущены немедленно, они помещаются в очередь.
Я знаю, что если таймер запускает событие, находящееся в очереди, а затем запускает то же событие, в то время как первое событие все еще находится в очереди, то одно из этих событий (второе?) Будет отброшено.
Это действует так, как будто первое событие отбрасывается, но второе событие больше не может найти свой «канал» для записи.
Однако, если я изменю «ручную» кнопку ссылки на кнопку изображения, поведение не изменится.
Есть идеи, в чем проблема (и в идеале решение)?
Большое спасибо заранее
Griff