2010-11-04 1 views
1

Задача: Содержимое страницы с мастером управления с помощью UpdatePanel и Placeholder. Над UpdatePanel является DropDownList. Мне нужно отобразить различные элементы ввода под раскрывающимся списком, когда пользователь меняет выбор в раскрывающемся списке. Когда пользователь нажимает «Далее» в элементе управления мастером, мне также нужно получить данные из этих динамических элементов управления.Изменение динамических элементов управления с помощью DropDownList на странице содержания

Я знаю, что все динамические элементы управления должны быть созданы в методе OnInit, чтобы получить данные от этих элементов управления во время обратной передачи. Однако, когда вызывается событие SelectedIndexChanged выпадающего списка, вызывается метод OnInit ... затем вызывается объект PageLoad ... и, наконец, обработчик события SelectedIndexChanged. ViewState не был восстановлен до тех пор, пока не будут вызваны методы OnLite & PageLoad, поэтому нет способа узнать, что пользователь выбрал в списке в то время, когда OnInit вызывается ... который точно, когда мне требуется создайте динамические элементы управления.

Итак ... как вы решаете эту проблему? Вам просто нужно написать всю страницу или большую часть ее, используя JavaScript?

Заранее спасибо.

ответ

0

Я стараюсь использовать старый метод школы для этого типа требований. Я бы написал все элементы управления, которые необходимы на панели обновления, а их свойство Visible установлено на false. Затем в пост-пост прочитайте состояние выпадающего списка и установите для соответствующих элементов управления видимое свойство значение true. Таким образом, нет «динамических» элементов управления, и из-за того, что элементы управления, свойство Visible которых ложно, не отображаются, они не загружаются, пока пользователь не увидит их.

+0

Спасибо Давид. Я думал, что пробовал это, и он не работал (я был неправ). Одна вещь (для меня), чтобы иметь в виду, заключается в том, что если вы используете элементы управления пользователя, чтобы заглянуть в заполнитель панели обновлений, и этот элемент управления пользователя имеет элементы управления, которые вызывают обратные вызовы, пользовательский элемент управления будет скрыт, поскольку раскрывающийся список родительской страницы обработчик события не будет вызван, потому что он не вызвал сообщение. Я работал над этой проблемой, когда все мои дочерние элементы управления пользователя выставляли публичное событие, которое оно срабатывало, когда оно вызывало обратную передачу, информируя родительскую страницу о «отображении» соответствующего заполнителя. –

0

Вы также можете использовать asp: hiddenfield и установить значение в случай var, который вы мысленно создаете. затем запустить небольшой JQuery скрипт сверху, чтобы посмотреть на

$(document).on("change", "#ddlSelector", setControls); 

затем просто сделать функцию, например:

function setControls(event) { 
    event.preventDefault(); 
    var selector = hiddenfield.val(); 
} 

тогда любой элемент, чтобы показать/скрыть можно сделать с получением тега:

$("#elementName").css("display", "inline"); 

или дисплей, нечего скрывать. Я использовал это на работе, потому что время от времени вам нужно изменить, не откладывая обратную передачу, но все же собирать данные, когда они задействуют форму.

Как правило, я избегаю jQuery для многих событий за силе кода и безопасности, но манипуляции с элементами DOM иногда могут быть намного проще с помощью jQuery.