Недавно я столкнулся с проблемой при использовании ретранслятора, в который я добавлял динамические элементы управления, и хотя у меня есть обходное решение, которое делает функционально то, что я хочу, d хотел бы знать, есть ли лучший способ сделать это для моего понимания. Я работаю с ASP.NET уже около 6 месяцев, и каждый раз, когда я думаю, что у меня есть жизненный цикл/просмотр, я полностью понял, что что-то появляется, что я не могу ответить.проблема с viewstate динамических элементов управления внутри ретранслятора
Я создавал форму, в которой пользователи могли регистрировать свой интерес к событию и регистрироваться для нескольких людей.
ASPX пошел что-то вроде:
<asp:Repeater ...>
<bunch of formatting and always there controls like firstname/lastname/address>
<asp:PlaceHolder ...>
<dynamic controls for workshop selection go here>
</asp:PlaceHolder>
</asp:Repeater>
Событие может иметь семинары, которые пользователь может зарегистрировать для, а также наличие мастерских зависит от даты, что они решили перейти к событию на. Доступность семинаров зависит от даты, поэтому они не могут выбирать семинары, пока они не выбрали дату.
В любом случае динамические элементы управления, которые я добавляю, в основном представляют собой кучу литералов и группу групп переключателей.
Я начал с добавления элементов управления в обработчике событий ItemDataBound, но при сохранении элементов репитера в моем списке делегатов ViewState переключателей никогда не обновлялась. Все поля, на которые ссылались в ItemTemplate, обрабатывались отлично, но не переключатели, которые я добавлял динамически.
Я попытался использовать событие ItemCreated вместо этого, добавив туда свои кнопки, но это, похоже, не имеет никакого значения. В конце концов я остановился на обходном пути, который основывался на this. В основном, я просто выводил поля ввода HTML в литерал и читал их обратно из запроса.
Все это прекрасно работает сейчас, и я доволен функциональностью, мне просто кажется, что действительно грязно, чтобы выводить радиокнопки как входы HTML напрямую, а не использовать серверный контроль. Кто-нибудь знает, почему ViewState не восстанавливается должным образом?
Для того, чтобы быть чистым, элементы управления были воссозданы в том же порядке каждый раз, с правильно установленным идентификатором. Я использую динамические элементы управления повсюду, и они работают нормально, я просто не могу заставить их работать в этом случае, когда я добавляю их в ретранслятор.
// дополнительные разъяснения
Я не могу создать эти элементы управления в Page.Init, как пользователь выбирает дату, которая вызывает обратную передачу, и я должен ждать ViewState такого контроля загрузки, прежде чем создать динамические элементы управления.
Я не могу создать эти элементы управления в Page.Init, когда пользователь выбирает дату, которая вызывает обратную передачу, и я должен дождаться, пока элемент управления этого элемента управления загрузится, прежде чем создавать динамические элементы управления. Кроме того, Page_Load еще не слишком поздно, ASP.NET должен пропустить весь жизненный цикл страницы ... –
... при добавлении нового элемента управления. По крайней мере, я думал, это должно было случиться. Я могу добавить динамические элементы управления в page_load и заставить его работать, только когда они находятся в репитере. –