динамически генерируемая форма, как на самом деле сохранить введенные данные - PullRequest
0 голосов
/ 28 октября 2010

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

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

спасибо

физ

1 Ответ

2 голосов
/ 28 октября 2010

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

Существует несколько способов решения этой проблемы.

1) Вызовите GenerateForm () независимо от того, что. Поскольку вы сказали, что они предварительно заполняют некоторые данные, вам необходимо изменить их, чтобы их можно было вызывать без этого. ASP.NET заполняет элементы управления данными, автоматически публикуемыми при обратной передаче, что вам и нужно.

2) Храните список всех ваших динамически сгенерированных элементов управления в переменной ViewState, чтобы вы могли заново сгенерировать их при обратной передаче. Для большинства ситуаций, в которых используются динамически создаваемые элементы управления, которые не очень просты (например, вы можете заранее не знать, какие именно элементы управления созданы), это лучшее решение. И часто вам захочется получить доступ к данным после обратной передачи, но, возможно, вы действительно не хотите воссоздавать всю форму, потому что вы больше ее не используете.

Пока вы воссоздаете элемент управления того же типа и идентификатора на или до Page_Load(), он будет привязан к опубликованным данным. Это не обязательно должно быть точно в том же месте в вашей форме. И его не нужно ни использовать, ни отображать - вы можете уничтожить его до визуализации формы, например, в Page_PreRender()

3) Если вас это не интересует, вы всегда можете использовать Request.Form для непосредственного просмотра опубликованных данных, хотя это также может быть непросто, поскольку имена, скорее всего, не будут точно соответствовать вашим идентификаторам элементов управления формы. ASP.NET генерирует уникальные идентификаторы на стороне клиента, которые зависят от контейнера, и это то, что вы найдете в Request.Form. Если вы не восстановите элемент управления, вы не сможете легко определить идентификатор, который ищете. Как правило, вы не должны этого делать, но это способ посмотреть опубликованные данные, а иногда вам это нужно.

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