Подтвердить что ты не робот

Обновление элемента управления вне UpdatePanel

Итак, у меня есть UserControl с каскадным DropDownList на нем. Выбор из списка 1 включает список 2, который, в свою очередь, включает список 3. После того, как вы сделали выбор во всех трех списках, вы можете перейти на следующую страницу.

DropDownList находятся внутри UpdatePanel. Но кнопка "Следующая страница" находится за пределами UpdatePanel. Эта кнопка должна быть отключена до тех пор, пока все три списка не будут выделены, а затем снова должны быть включены. Но поскольку кнопка находится за пределами UpdatePanel, она не обновляется, когда я делаю выбор. ( Изменить. Кнопка "Следующая страница" находится на странице, которая также содержит UserControl.)

Я знаю один способ решить эту проблему:

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

Это обеспечивает обратную передачу при изменении любого раскрывающегося списка, чтобы кнопка могла обновляться. Но если я это сделаю, я мог бы упростить, избавившись от UpdatePanel в первую очередь.

Есть ли другой способ, с помощью какого-то умного JavaScript или что-то еще, что я могу обновить элемент управления вне UpdatePanel, не отказываясь от Ajax?

4b9b3361

Ответ 1

Не могли бы вы добавить панель обновления вокруг "следующей страницы", а затем добавить триггер в панель обновления dropdownlist для запуска панели обновления следующей страницы?

Просто выкидывая идеи, не попробовав:)

Ответ 2

Поместите UpdatePanel вокруг следующей кнопки и создайте триггер для каждого раскрывающегося списка, чтобы он запускал асинхронную обратную передачу. Пример:

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="dropDownList1" />
    <asp:AsyncPostBackTrigger ControlID="dropDownList2" />
    <asp:AsyncPostBackTrigger ControlID="dropDownList3" />
</Triggers>

Ответ 3

вы можете обновить элемент управления вне панели обновлений, поместив его в update_panel2 и говоря update_panel2.update().

Обратите внимание, что для параметра UpdateMode для параметра UpdatePanel должно быть установлено значение conditional.

Ответ 4

В идеале это было бы сделано в javascript с проверкой проверки на стороне сервера в обработчике событий click.

Быстрый пример 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');
  }
});