Динамически генерируемый контент в PlaceHolder внутри FormView?

Обращаюсь за помощью здесь, так как это меня поставило в тупик. Короче говоря, у меня есть динамическая таблица, построенная из функций, отображаемая в заполнителе внутри FormView.

У меня есть кнопка «сохранить» внутри EditItemTemplate FormView, CommandName = "Save" - ​​у меня есть Select Case (здесь используется VB), и (почти) все работает, как ожидалось.

Однако, когда я вытаскиваю свой PlaceHolder в Code Behind, я не показываю никаких элементов управления в PlaceHolder.

Вот краткое изложение:

FormView ItemTemplate имеет View_PlaceHolder, который правильно отображает данные из динамически созданной таблицы. FormView EditItemTemplate имеет Edit_PlaceHolder, который загружает те же данные из динамически сгенерированной таблицы в TextBox (отлично работает, те же данные отображаются, как ожидалось)

Когда я нажимаю Сохранить, мой текущий код:

Dim Edit_PlaceHolder as PlaceHolder = FormView1.FindControl("Edit_FV_PlaceHolder")
Dim EditTable as Table = Edit_PlaceHolder.FindControl("Edit_Plan_Holder")

Edit_PlaceHolder не является ничем, но имеет 0 элементов управления в Controls.Count

О, еще одна информация - моя таблица построена и добавлена ​​в PlaceHolder в событии FormView.DataBound.

Что я делаю неправильно?


person John    schedule 30.06.2013    source источник
comment
Какие события вы используете, можете показать код?   -  person OneFineDay    schedule 30.06.2013
comment
Использование FormView.DataBound для определения CurrentMode. Если CurrentMode = ReadOnly, показать таблицу просмотра. Если CurrentMode = Edit, отобразите Edit Table. Я добавляю свои элементы управления в событие PlaceHolder в FormView.DataBound.   -  person John    schedule 30.06.2013


Ответы (2)


Вы также должны повторно заполнить и добавить динамически добавляемую таблицу в PostBacks, а не только при начальной загрузке. Ознакомьтесь с ответом на этот вопрос, чтобы получить более подробную информацию. .

person NoAlias    schedule 30.06.2013
comment
В какой момент жизненного цикла я могу это сделать? Page_Load? Page_Init? - person John; 30.06.2013
comment
Мне всегда удавалось реализовать это в Page_Load, но многое из того, что я читал, говорит, что делать это в Init. Главное - сохранить эту часть нагрузки вне блока If Not Page.IsPostback. - person NoAlias; 30.06.2013
comment
Что ж, это странно. Попробую сейчас. Когда я нажимаю «Изменить» и устанавливаю для FormView в CodeBehind значение «Изменить», я отлично показываю запись №1, но элемент управления заполнителем по-прежнему остается заполнителем представления. Если я нажму «Запись 2», то в элементах управления появится поле «Изменить заполнитель». Это похоже на то, как будто я наблюдаю этот цикл: 1) Начальная загрузка страницы - загружает данные FormView VIEW. 2) Нажмите кнопку «Редактировать», вызовет обратную передачу, Page_Load запускается снова, FormView в ЭТОЙ точке по-прежнему показывает View, а привязка данных FormView и переключение на EDIT не запускается, пока ПОСЛЕ завершения Page_Load. - person John; 30.06.2013
comment
Что ж, я создал небольшую функцию для рекурсивного перебора дочерних элементов управления родительского элемента управления, который я ему передаю. Если я запускаю эту функцию ПОСЛЕ FormView.DataBound, я показываю правильный Edit_Placeholder, который я ищу, и, кроме того, все мои элементы управления находятся в нем. Однако после того, как я нажму кнопку «Сохранить», в PlaceHolder останется ноль элементов управления. Мои элементы управления внутри PlaceHolder (который находится внутри FormView) теряются, когда я нажимаю кнопку. Как мне сохранить эти данные в один клик? - person John; 30.06.2013
comment
Я бы вернулся к своему ответу. Убедитесь, что каждый элемент управления повторно добавляется при каждой обратной передаче, чтобы эти значения сохранялись. - person NoAlias; 30.06.2013
comment
Как мне добавить элемент управления обратно в FormView на странице Page_load? В частности, нужные мне данные не загружаются до FormView.DataBound, которое происходит ПОСЛЕ Page_Load. - person John; 30.06.2013

Хорошо, вот что произошло:

1) Как заявил Ноалиас, необходимо сохранить удостоверения личности. Я использовал Page_Load, чтобы установить переменную ViewState, если я был в режиме просмотра или редактирования.

2) Я использовал отдельный метод BuildViewTable () и метод BuildEditTable (), а внутри тех, которые назывались моим отдельным классом, построил таблицу.

3) Теперь все работает :) Спасибо, NoAlias!

person John    schedule 23.07.2013