Получение данных от дочерних элементов управления загружена программно

StackOverflow https://stackoverflow.com/questions/2856839

Вопрос

Я создал 2 элемента управления для манипулирования объектом данных: 1 для просмотра и другого для редактирования.

На одной странице я загружаю «View» UserControl и пройти данные к этому так:

ViewControl control = (ViewControl)LoadControl("ViewControl.ascx");
control.dataToView = dataObject;
this.container.Controls.Add(control);

Это все хорошо, и внутри контроля я могу схватить это данные и отображать его.

Теперь я пытаюсь следовать подобным подходу для редактирования. У меня есть другой элемент управления пользователем (с некоторыми текстовыми коробками для редактирования), к которому я пропускаю исходные данные так же, как я сделал для просмотра:

EditControl control = (EditControl)LoadControl("EditControl.ascx");
control.dataToEdit = dataObject;
this.container.Controls.Add(control);

Который также работает нормально.

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

Есть ли решение для этого? Или этот способ попытаться сохранить вещи и, возможно, повторно использовать невозможен?

Заранее спасибо.

Это было полезно?

Решение 3

Вот мое решение:

На странице я держу ссылку на контроль, который загружен программно. В элементе управления я создал метод getData (), который возвращает объект с данными, введенными пользователем. Когда пользователь представляет форму, страницы вызывает метод GetData () на элементе управления для доступа к данным, которые введен введенный пользователь.

Другие советы

Просто поддерживайте ссылку на контроль как переменную в коде страницы. Т.е.

private EditControl control;

protected void Page_Init(object sender, EventArgs e)
{
   control = (EditControl)LoadControl("EditControl.ascx");
   control.dataToEdit = dataObject;
   this.container.Controls.Add(control);
}

protected void Button_Click(object sender, EventArgs e)
{
   var dataToEdit = control.dataToEdit; 
}

До тех пор, пока вы создаете элемент управления в правой части жизненного цикла страницы (инициализация), то ViewState будет поддерживаться. Я предполагаю, что datatoDit это просто TextBox или что-то?

Элементы управления, созданные динамически, должны быть добавлены на Init или PreInit событие на странице.

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

Больше информации о жизненном цикле страницы здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top