ASP.NET AJAX отменяет обратные передачи - PullRequest
4 голосов
/ 27 июля 2011

У меня есть веб-страница 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. Страница загружается, и таймер JavaScript в элементе управления «X» активирует обратную передачу на LinkButton «CausePostbackButton» [eval (__ doPostBack (postbackButtonClientID, ''));]. (Таким образом, это имитирует пользователя, нажимающего кнопку).
  2. AJAX-вызов поступает на сервер, а n секунд спустя он возвращается и приводит к обновлению страницы определенным образом.
  3. Затем пользователь щелкает LinkButton «btnShowItems», который вызывает обратную передачу на сервер, а n ' секунд спустя возвращает и приводит к обновлению страницы определенным образом.

Вариант использования № 2 - ошибка

  1. Страница загружается, и таймер JavaScript в элементе управления «X» активирует обратную передачу на LinkButton «CausePostbackButton». (Таким образом, это имитирует пользователя, нажимающего кнопку).

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

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

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

Мои мысли

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

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

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

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

Есть идеи, в чем проблема (и в идеале решение)?

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

Griff

1 Ответ

3 голосов
/ 29 июля 2011

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

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

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

...