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 - 成功
- ページが読み込まれ、コントロール "X" 内の JavaScript タイマーが LinkButton "CausePostbackButton" [eval(__doPostBack(postbackButtonClientID,''));] でポストバックをアクティブにします。(したがって、これはユーザーがボタンをクリックするのを模倣します)。
- AJAX 呼び出しはサーバーに送信され、n秒後に返され、特定の方法でページが更新されます。
- 次に、ユーザーが LinkButton "btnShowItems" をクリックすると、サーバーへのポストバックが発生し、n秒後に戻り、特定の方法でページが更新されます。
ユースケース #2 - 失敗
ページが読み込まれ、コントロール "X" 内の JavaScript タイマーが LinkButton "CausePostbackButton" のポストバックをアクティブにします。(したがって、これはユーザーがボタンをクリックするのを模倣します)。
サーバーが応答する前に、ユーザーは LinkButton "btnShowItems" をクリックします。
FireFox/Firebug では、最初のポストバック イベントが "Aborted" であることがわかります。2 番目のポストバック イベントは完了しますが (レポートにかかった時間が表示されます)、ページは視覚的に更新されません。
「手動」ボタンをもう一度クリックすると、期待どおりに機能します。
私の考え
JavaScript がシングル スレッドであることはわかっているので、イベントをすぐに実行できない場合はキューに入れられます。
タイマーがキューに入れられたイベントを発生させ、最初のイベントがまだキューに入れられている間に同じイベントを発生させた場合、これらのイベントの 1 つ (2 番目のイベント?) がドロップされることを知っています。
これは、最初のイベントが破棄されているかのように動作しますが、2 番目のイベントは書き込み先の「チャネル」を見つけることができなくなります。
ただし、「手動」リンク ボタンをイメージ ボタンに変更しても、動作は変わりません。
問題が何であるか(そして理想的には解決策)はありますか?
よろしくお願いします
グリフ