Создание динамического пользовательского интерфейса в веб-формах ASP.NET - PullRequest
4 голосов
/ 06 декабря 2011

Мне нужно создать страницу опроса со следующей структурой, считываемой из базы данных.

Survey QuestionA
a) Answer1 [Radio button]
b) Answer2 [Radio button]
c) Answer3 [Radio button]
d) Answer4 [Radio button]

repeats..

На странице много вопросов, которые необходимо динамически добавить.Мне нужно сохранить результат формы в массиве объекта Вопрос при отправке.Один из известных мне способов сделать это - создать динамический интерфейс в таблице и получить значения FindControl.Есть ли лучший (элегантный) способ сделать это?

Ответы [ 5 ]

2 голосов
/ 06 декабря 2011

Я предлагаю создать userconrol , который реализует вопрос (метку) и ответы (радиокнопки), и каждый элемент управления (метки, радио) привязан к свойству вашего usercontrol,Затем вы можете прочитать вопросы из базы данных и для каждого из данных создать этот usercontrol object и установить соответствующие данные этому свойству usercontrol, а для чтения данных из этого состояния управления сделать наоборот.

Хотя вы должны воссоздавать пользовательские элементы управления в каждом посте обратно и устанавливать для них данные по умолчанию.

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

2 голосов
/ 06 декабря 2011

В ASP.Net MVC он выполняет грязную работу за вас с помощью связывателей моделей по умолчанию. Конечно, вы также можете создать свой собственный. Хотя это не дает вам автоматического решения, на которое вы надеялись в ASP.Net Web Forms, я предпочел бы в этой ситуации придерживаться сходного общего шаблона, который ASP.Net MVC использует для соглашения об именовании, упрощая его. Затем вы можете начать писать код, который может быть повторно использован с течением времени. Вот ссылка на статью, объясняющую соглашение об именах в блоге Haack http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx.

Долгосрочная рекомендация - прийти в ASP.Net MVC, жизнь здесь просто лучше:)

0 голосов
/ 07 декабря 2011

использовать для этой цели элемент управления radiobuttonlist (который вы можете видеть на панели инструментов, это стандартный элемент управления asp.net). Это зависит от ваших потребностей.

0 голосов
/ 06 декабря 2011

Вы всегда можете добавить элементы управления программно.

Скажем, у вас есть панель управления aspnet, которую вы можете выполнять ...

RadioButton rb = new RadioButton();
rb.ID = "rbRadioButton";
rb.Name = "rbRadioButton";
rb.cssClass = "radioClass";
Panel1.Controls.Add(rb);

Извините за суровость примера, у нас пока нет визуальной студии, чтобы проверить это, но я надеюсь, что вы поняли идею. По сути, вы можете построить весь вопрос таким образом, основываясь исключительно на базе данных. Недостатком является получение значений, поскольку вы должны переопределить метод Render (если я правильно помню, это было давно, у меня есть пример, если вы хотите, чтобы я его нашел).

Я признаю, что это немного излишне, но это возможное решение.

0 голосов
/ 06 декабря 2011

Вы можете использовать jQuery, чтобы получить выбранные переключатели по отмеченному свойству и добавить их к номеру вопроса. например на вопрос 1 у вас есть

Таким образом, вы можете получать значения, перебирая переключатели следующим образом: $ ( "Вход [тип = 'Радио']"). Проверено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...