1

2 つの更新パネルがあり、両方の更新パネルが UpdateMode="Conditional" に設定されています。

最初の更新パネルには以下が含まれます。

  • 2 AJAX ツールキット SliderExtender
  • 2 対応するテキスト ボックス

最初の更新パネルには、2 つの SliderExtender テキスト ボックスの TextChanged イベントが非同期ポスト バック トリガーとして設定されています。

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="tb_Slider1" EventName="TextChanged" />
    <asp:AsyncPostBackTrigger ControlID="tb_Slider2" EventName="TextChanged" />
</Triggers>

2 番目の更新パネルには以下が含まれます。

  • 3 ラベル
  • 1秒間隔のタイマー

2 番目の更新パネルは、コード ビハインドを介してラベル内のテキストを読み込みます。2 番目の更新パネルには、タイマーの Tick イベントが非同期ポストバック トリガーとして設定されています。

<Triggers>
     <asp:AsyncPostBackTrigger ControlID="tm_Timer1" EventName="Tick" />
</Triggers>

最初の更新パネルでいずれかのスライダーをスクロールすると、2 番目の更新パネルのタイマーが作動します。スライダーはそれ自体をドロップし、TextChanged イベントを発生させます。

2 番目の更新パネルに部分的にポスト バックすると、最初の更新パネル コントロールが反応するのはなぜですか?

私は更新パネルをブラッシュアップしてきましたが、部分的なポストバックは、すべてのサーバーページのライフサイクルイベントを実行するという点で、完全なポストバックに似ているようです. これがスライダーの誤動作の原因かどうかわかりませんか?

とにかくこれを回避する方法はありますか?それとも「意図したとおりに機能しています」ですか?

最終的には、タイマーが動いていてもスライダーを自由に動かせるようにしたいと考えています。このようにして、タイマー更新パネルが頻繁に更新され、ユーザーがスライダー コントロールをドロップすると (つまり、TextChanged)、最初の更新パネルが更新されます。

4

1 に答える 1

1

最初の updatepanel のトリガー コレクションに追加されないという事実にもtm_Timer1かかわらず、それがカチカチ音をたてると、サーバーに送信されたすべてのフォームのコントロールの値 (テキスト ボックスの値と最初の UpdatePanel を含む) も更新されます。この問題を解決するには、ScriptManager コントロールの直後に以下のスクリプトを追加します。

<script type="text/javascript">
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

     var realDoPostback = __doPostBack;
     __doPostBack = function (sender, args) {
          if (sender === "<%= tm_Timer1.UniqueID %>") {
               $get("<%= tb_Slider1.ClientID  %>").removeAttribute("name");
               $get("<%= tb_Slider2.ClientID  %>").removeAttribute("name");
          }
          realDoPostback(sender, args);
     }

     function endRequestHandler(sender, args) {
          $get("<%= tb_Slider1.ClientID  %>").setAttribute("name", "<%= tb_Slider1.UniqueID %>");
          $get("<%= tb_Slider2.ClientID  %>").setAttribute("name", "<%= tb_Slider2.UniqueID %>");
     }
</script>
于 2012-05-30T14:58:01.333 に答える