4

2 つのポストバック イベントを含む ASP.NET Web ページがあり、2 番目のイベントが最初のイベントを中止しています。2 番目のものは、完了すると期待どおりにレンダリングされません。

詳細に

2 つのリンク ボタンを効果的に含む ASP.NET Web ページがあります。Telerik ASP.NET AJAX コントロールを使用していますが、動作がこれらのコントロールに固有のものかどうかはわかりません。

The Page - 非常に縮小されたバージョンは次のとおりです。

<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. ページが読み込まれ、コントロール "X" 内の JavaScript タイマーが LinkBut​​ton "CausePostbackButton" [eval(__doPostBack(postbackButtonClientID,''));] でポストバックをアクティブにします。(したがって、これはユーザーがボタンをクリックするのを模倣します)。
  2. AJAX 呼び出しはサーバーに送信され、n秒後に返され、特定の方法でページが更新されます。
  3. 次に、ユーザーが LinkBut​​ton "btnShowItems" をクリックすると、サーバーへのポストバックが発生し、n秒後に戻り、特定の方法でページが更新されます。

ユースケース #2 - 失敗

  1. ページが読み込まれ、コントロール "X" 内の JavaScript タイマーが LinkBut​​ton "CausePostbackButton" のポストバックをアクティブにします。(したがって、これはユーザーがボタンをクリックするのを模倣します)。

  2. サーバーが応答する前に、ユーザーは LinkBut​​ton "btnShowItems" をクリックします。

  3. FireFox/Firebug では、最初のポストバック イベントが "Aborted" であることがわかります。2 番目のポストバック イベントは完了しますが (レポートにかかった時間が表示されます)、ページは視覚的に更新されません。

  4. 「手動」ボタンをもう一度クリックすると、期待どおりに機能します。

私の考え

  • JavaScript がシングル スレッドであることはわかっているので、イベントをすぐに実行できない場合はキューに入れられます。

  • タイマーがキューに入れられたイベントを発生させ、最初のイベントがまだキューに入れられている間に同じイベントを発生させた場合、これらのイベントの 1 つ (2 番目のイベント?) がドロップされることを知っています。

  • これは、最初のイベントが破棄されているかのように動作しますが、2 番目のイベントは書き込み先の「チャネル」を見つけることができなくなります。

ただし、「手動」リンク ボタンをイメージ ボタンに変更しても、動作は変わりません。

問題が何であるか(そして理想的には解決策)はありますか?

よろしくお願いします

グリフ

4

1 に答える 1

3

ディック・ランパードが示唆したように、テレリックに直接連絡を取った。彼らはすぐに解決策を思いついた:

設計上、ASP.NET AJAX フレームワークは、最初の ajax 要求からの応答を受信する前に別の ajax 要求を開始しようとすると、進行中の ajax 要求をキャンセルします。たとえば、RadAjaxPanel の RequestQueueSize を 3 に設定します。

それはうまくいきました!

于 2011-07-28T21:02:08.020 に答える