2011-07-27 2 views
4

У меня есть веб-страница ASP.NET с двумя событиями обратной передачи, а вторая прерывает первый. Второй вариант не отображает ожидаемое после его завершения.ASP.NET AJAX postbacks aborting

в деталях

У меня есть веб-страницы ASP.NET, которая эффективно содержит две кнопки связи. Он использует элементы управления Telerik ASP.NET AJAX, но я не уверен, что если поведение specfic этих элементы управления:

На странице - крайне урезанная версия выглядит следующим образом:

<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> 

Use Case # 1 - успешный

  1. загрузки страницы и таймер JavaScript в Control "X" активирует постбэк на LinkButton "CausePostbackButton" [Eval (__ doPostBack (postbackButtonClientID, '')); ]. (Таким образом, это подражает пользователю, нажав кнопку).
  2. Звонок AJAX отправляется на сервер, а n секунд спустя он возвращает и приводит к обновлению страницы определенным образом.
  3. Затем пользователь нажимает ссылку «btnShowItems» LinkButton, которая вызывает обратную связь с сервером, и n ' секунд спустя возвращает и приводит к обновлению страницы определенным образом.

Use Case # 2 - отказ

  1. загрузки страницы и таймер JavaScript в Control "X" активирует постбэк на LinkButton "CausePostbackButton". (Таким образом, это подражает пользователю, нажав кнопку).

  2. Прежде чем сервер успеет ответить, Пользователь нажимает на ссылку «btnShowItems» LinkButton.

  3. В FireFox/Firebug вы можете видеть, что первое событие после обратной связи «Прервано». Второе событие после завершения завершается (вы можете видеть время, которое было указано), но страница не визуально обновляется.

  4. Если после этого нажать кнопку «вручную», то это будет работать так, как ожидалось.

Мои мысли

  • Я знаю, что JavaScript однопоточный, так что если события не могут быть запущены сразу, то они ставятся в очередь.

  • Я знаю, что если таймер запускает событие, стоящее в очереди, а затем запускает одно и то же событие, пока первое событие все еще поставлено в очередь, то одно из этих событий (второе?) Будет удалено.

  • Это действует так, как будто первое событие разбивается, но затем второе событие больше не может найти свой «канал» для записи.

Однако, если я изменил «ручную» кнопку «Ссылка» на кнопку «Изображение», то поведение не изменится.

Любые идеи, в чем проблема (и в идеале решение)?

Большое спасибо заранее

Griff

+0

Почему бы не написать свой вопрос на форумах telerik напрямую или связаться с ребятами из вашей команды поддержки? Должна иметь возможность быстро получить ответ. –

+0

Dick прав, это проблема telerik, а не проблема ajax или javascript. Если вы используете jquery для совершения ваших вызовов ajax, у вас будет больше контроля над вашим кодом. – DidierDotNet

ответ

3

Как предложил Дик Лэмпард, мы связались с Telerik напрямую. Они сразу же придумали решение:

По дизайну ASP.NET AJAX Framework отменяет текущий запрос ajax, если вы попытаетесь инициировать другое до получения ответа от первого. Установите RequestQueueSize для RadAjaxPanel на 3, например ...

Это сработало!

Смежные вопросы