13

だから私はUserControlいくつかのカスケードDropDownLists を持っています。リスト 1 から選択すると、リスト 2 が有効になり、リスト 3 が有効になります。3 つのリストすべてで選択を行うと、次のページに移動できます。

DropDownLists はUpdatePanelすべて. しかし、「次のページ」ボタンはUpdatePanel. このボタンは、3 つのリストすべてが選択されるまで無効にしてから、再度有効にする必要があります。しかし、ボタンは の外側にあるUpdatePanelため、選択しても更新されません。(編集:「次のページ」ボタンは、 も含むページにありますUserControl。)

これを解決する1つの方法を知っています:

var scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(dropDownList1);
scriptManager.RegisterPostBackControl(dropDownList2);
scriptManager.RegisterPostBackControl(dropDownList3);

これにより、ドロップダウン リストが変更されたときにポストバックが確実に行われるため、ボタンを更新できます。UpdatePanelしかし、これを行うと、そもそもを取り除くことで単純化できます。

UpdatePanel巧妙な JavaScript などを使用して、Ajax をあきらめずに外部のコントロールを更新できる別の方法はありますか?

4

4 に答える 4

12

次のボタンの周りに UpdatePanel を配置し、ドロップダウンごとにトリガーを作成して、非同期ポストバックを起動します。元:

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="dropDownList1" />
    <asp:AsyncPostBackTrigger ControlID="dropDownList2" />
    <asp:AsyncPostBackTrigger ControlID="dropDownList3" />
</Triggers>
于 2009-02-02T16:05:13.767 に答える
7

「次のページ」の周りに更新パネルを追加してから、次のページの更新パネルをトリガーするためのトリガーをドロップダウンリスト updatepanel に追加できませんか?

実際に試してみずに、アイデアを捨てるだけです:)

于 2009-02-02T15:55:30.480 に答える
2

update_panel2 に配置して と言うと、更新パネルの外にあるコントロールを更新できますupdate_panel2.update()

UpdateModeこれを機能させるには、UpdatePanelの を に設定する必要があることに注意してくださいconditional

于 2012-06-12T03:36:38.717 に答える
1

これは、クリック イベント ハンドラーでサーバー側の検証チェックを使用して、javascript で行うのが理想的です。

簡単な jQuery の例:

//assuming the dropdowns all have the css class "cascade"
$('select.cascade').change(function() {
  If ($('option:selected',this).length == 3) {
    $('input[id$=btnNext]').removeAttr('disabled');
  }
});
于 2009-02-02T16:05:09.290 に答える