Ответ 1
Не могли бы вы добавить панель обновления вокруг "следующей страницы", а затем добавить триггер в панель обновления dropdownlist для запуска панели обновления следующей страницы?
Просто выкидывая идеи, не попробовав:)
Итак, у меня есть 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?
Не могли бы вы добавить панель обновления вокруг "следующей страницы", а затем добавить триггер в панель обновления dropdownlist для запуска панели обновления следующей страницы?
Просто выкидывая идеи, не попробовав:)
Поместите UpdatePanel вокруг следующей кнопки и создайте триггер для каждого раскрывающегося списка, чтобы он запускал асинхронную обратную передачу. Пример:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="dropDownList1" />
<asp:AsyncPostBackTrigger ControlID="dropDownList2" />
<asp:AsyncPostBackTrigger ControlID="dropDownList3" />
</Triggers>
вы можете обновить элемент управления вне панели обновлений, поместив его в update_panel2 и говоря update_panel2.update()
.
Обратите внимание, что для параметра UpdateMode
для параметра UpdatePanel должно быть установлено значение conditional
.
В идеале это было бы сделано в 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');
}
});