2010-04-23 5 views
2

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

Так скажите, что пользователь выбирает причину A из формы на редактирование страницы, тогда ей нужно отображать вопросы 1 и 2 на странице edit_confirmation. Но если они выбирают Reason B, тогда ему нужно отображать вопросы 3 и 4.

Я собираю код причины из строки запроса и устанавливаю оператор switch, но я не могу найти нигде, как выводить разные управления. Если предполагается, что вопросы 1 и 2 будут отображаться, это может быть текстовое поле, а другое - флажок, но если вопросы 3 и 4 должны отображаться, может потребоваться выпадающий список и флажок.

EDIT: Я попытаюсь выполнить некоторые из приведенных ниже предложений и вернусь, чтобы отметить ответ и возвысить соответственно. Спасибо всем за быстрый ответ.

EDIT EDIT: Ответы rlb.usa и AndrewVos работают одинаково хорошо. Я пошел с Эндрю, так как это казалось более «правильным» способом сделать это.

ответ

4

Посмотрите на элемент управления MultiView. Он позволяет добавлять виды и указывать, какой из них отображается в соответствии с вашими требованиями.

+0

Я думаю, что MultiView должен хорошо подходить. – AlwaysAProgrammer

+2

Согласованный, многопользовательский способ - это путь. Лучше всего настроить Enum с дескриптивными значениями, которые сопоставляются с индексами каждого «представления». Затем вы можете написать простой способ переключения активного представления на основе перечисления. – Josh

+0

Какая польза от использования MultiView в отношении того, что предложено rlb.usa ниже, если вы устанавливаете панели или даже отдельные элементы управления на видимые или невидимые? –

4

Вывод различных элементов управления? Ой, это звучит очень болезненно. Я думаю, что термин, который вы ищете, - это динамические элементы управления (элементы управления, созданные в коде). У меня всегда было больше проблем с этим, чем это стоит.

Самый распространенный способ сделать это - настроить все свои элементы управления на форме. У каждого «вопроса» или соответствующего вопроса задайте все, что содержится в ASP:Panel. Далее, внутри вашего кода все, что вам нужно сделать, это применить свою логику и скрыть/показать ASP:Panel s (путем установки свойства Visible) в соответствии с вашими потребностями. Вы можете либо сделать эту логику на Page_Load, если это применимо, либо при изменении конкретного ответа.

0

Почему бы просто не отправить их на другую страницу по причине, которую они выбирают при редактировании страницы?

+1

Это может стать старым быстро, если у него есть много вариантов выбора ветви. –

+0

@ rlb.usa true, но может ли он быть старше, чем добавлять все больше элементов управления на одну страницу? – BlackICE

1

Вы можете использовать элемент управления PlaceHolder и добавить к нему соответствующие элементы управления на стороне сервера или вы можете отобразить все элементы управления с типом style.display равным none и установить соответствующие «блокировать» использование клиентской стороны javascript

0

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

Другой подход - динамически создавать элементы управления и добавлять их. Вы должны будете думать о управлении viewstate, поскольку эти вещи могут быть довольно неприятными.

0

Вы можете просто установить видимое свойство элемента управления в своем событии page_load. Таким образом, в инструкции switch вы будете делать только видимые элементы управления, которые вы хотите видеть.

Смежные вопросы