построение динамических элементов управления на обратной передаче (asp.net) - PullRequest
2 голосов
/ 17 января 2010

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

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

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

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

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

  • Я изначально сохранил значение в ViewState, как это имеет отношение к страница, но значение viewstate не доступно на странице init (или это ??)
  • скрытая переменная, а затем доступ к значению в коллекции форм
  • сеанс - я не хочу использовать сеанс, кажется проблематичным, например Что делать, если пользователь просматривает две анкеты?
  • снова строка запроса? но это кажется слишком легким для изменения, и динамическое управление просто не имеет смысла ...
  • в самих элементах управления? например игнорировать идентификатор анкеты все вместе и просто уйти от вопроса вопрос возможно ?? предполагая, что идентификаторы управления будут в некотором формате, подобном controlQ #, например. controlQ1, controlQ2. это означает, что каждый идентификатор вопроса должен быть уникальным

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

Ответы [ 2 ]

1 голос
/ 18 января 2010

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

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

0 голосов
/ 17 января 2010

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

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

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

...