Получение данных от дочерних элементов управления загружается программно - PullRequest
0 голосов
/ 18 мая 2010

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

На одной странице я загружаю «представление» 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 ]

2 голосов
/ 18 мая 2010

Просто сохраните ссылку на элемент управления в качестве переменной в коде страницы. * 1001 Т.е. *

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 будет поддерживаться. Я предполагаю, что dataToEdit это просто TextBox или что-то?

0 голосов
/ 27 мая 2010

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

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

0 голосов
/ 18 мая 2010

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

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

Подробнее о жизненном цикле страницы здесь

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