Если вы динамически генерируете какие-либо элементы управления формы, которые публикуют данные или вызывают обратную передачу, вам необходимо заново создать их при обратной передаче, чтобы они были связаны со своими данными или своими событиями после обратной передачи. Концептуально это имеет смысл. Если после обратной передачи у вас нет элемента управления в форме, как вы можете посмотреть на его содержимое?
Существует несколько способов решения этой проблемы.
1) Вызовите GenerateForm () независимо от того, что. Поскольку вы сказали, что они предварительно заполняют некоторые данные, вам необходимо изменить их, чтобы их можно было вызывать без этого. ASP.NET заполняет элементы управления данными, автоматически публикуемыми при обратной передаче, что вам и нужно.
2) Храните список всех ваших динамически сгенерированных элементов управления в переменной ViewState, чтобы вы могли заново сгенерировать их при обратной передаче. Для большинства ситуаций, в которых используются динамически создаваемые элементы управления, которые не очень просты (например, вы можете заранее не знать, какие именно элементы управления созданы), это лучшее решение. И часто вам захочется получить доступ к данным после обратной передачи, но, возможно, вы действительно не хотите воссоздавать всю форму, потому что вы больше ее не используете.
Пока вы воссоздаете элемент управления того же типа и идентификатора на или до Page_Load()
, он будет привязан к опубликованным данным. Это не обязательно должно быть точно в том же месте в вашей форме. И его не нужно ни использовать, ни отображать - вы можете уничтожить его до визуализации формы, например, в Page_PreRender()
3) Если вас это не интересует, вы всегда можете использовать Request.Form для непосредственного просмотра опубликованных данных, хотя это также может быть непросто, поскольку имена, скорее всего, не будут точно соответствовать вашим идентификаторам элементов управления формы. ASP.NET генерирует уникальные идентификаторы на стороне клиента, которые зависят от контейнера, и это то, что вы найдете в Request.Form. Если вы не восстановите элемент управления, вы не сможете легко определить идентификатор, который ищете. Как правило, вы не должны этого делать, но это способ посмотреть опубликованные данные, а иногда вам это нужно.