создание динамических элементов управления при обратной передаче (asp.net)

StackOverflow https://stackoverflow.com/questions/2080833

Вопрос

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

как наилучшим образом сохранить информацию о создании динамических элементов управления при обратной передаче и т.д. В событии init?..

например ,возьмем классический сценарий "анкетирования" ...question.aspx?id=1

  1. получите идентификатор из строки запроса
  2. загружайте вопросы откуда угодно и создавайте элементы управления динамически, или динамически добавляйте каждый вопрос пользователь контролирует количество вопросов и т. Д
  3. страница публикует ответные сообщения (пользователь нажимает кнопку отправить, я думаю!)
  4. в событии init...где у вас должно быть уже сохранил идентификатор, чтобы воссоздать элементы управления вопросом?

вещи, которые я пробовал / о которых думал до сих пор:

  • Изначально я сохранил значение в viewstate, поскольку оно относится к странице, но значение viewstate недоступно при инициализации страницы (или есть??)
  • скрытая переменная, а затем доступ к значению в коллекции форм
  • session - я не хочу использовать session, кажется проблематичным, напримерчто делать, если пользователь просматривает две анкеты?
  • снова строка запроса?но это кажется слишком простым для изменения, и динамические элементы управления просто не имели бы смысла...
  • в самих элементах управления?например ,может быть, проигнорировать идентификатор анкеты целиком и просто отказаться от идентификатора вопроса??предполагая, что идентификаторы элементов управления будут в некотором формате, таком как controlQ #, напримерКонтрольный вопрос 1, контрольный вопрос 2.это означает, что идентификатор каждого вопроса должен быть уникальным

любая помощь / руководство и т.д. Очень ценятся!!!

Это было полезно?

Решение

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

Если вы обеспокоены тем, что пользователи манипулируют параметрами строки запроса, то, возможно, вам следует добавить некоторые дополнительные параметры, которые позволят вам проверить корректность строки запроса во время обратной передачи.В качестве простого примера вы могли бы добавить MD5-хэш параметра ID и идентификатора текущего сеанса и воссоздать / сравнить эту контрольную сумму во время обратной передачи.

Другие советы

попробуйте создать / загрузить пользовательские элементы управления на странице OnLoad.если вы хотите загрузить внутри usercontrol другие usercontrols, используйте событие OnInit.

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

contols-идентификатор:да, вы должны предоставить им уникальные идентификаторы, иначе это не сработает.если вы храните свои вопросы в базе данных, не должно возникнуть никаких проблем с использованием первичного ключа базы данных для этого, поэтому назовите их, напримервопрос-1, вопрос-2 (элементы управления)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top