С использованием коллекции Controls можно создать и программно добавить к странице элемент управления. Ниже показан пример, генерирующий новую кнопку и добавляющий ее к панели на странице:
protected void Page_Load(object sender, System.EventArgs e)
{
// Создать новый объект кнопки.
Button newButton = new Button();
// Присвоить некоторый текст и идентификатор для будущего извлечения.
newButton.Text = "* Dynamic Button *";
newButton.ID = "newButton";
// Добавить кнопку к панели.
Panel.Controls.Add(newButton);
}
Вы можете выполнить этот код в любом обработчике событий. Однако поскольку страница уже создана, этот код всегда добавляет новый элемент управления в конец коллекции. В данном примере это означает, что новая кнопка окажется в нижней части элемента управления Panel.
Для получения большего контроля над расположением динамического элемента управления можно использовать PlaceHolder. PlaceHolder — это элемент управления, целью которого является размещение других элементов управления. Если вы не добавите другие элементы управления в коллекцию Controls элемента управления PlaceHolder, он ничего не изменит на окончательной Web-странице. Visual Studio определяет визуальное представление по умолчанию в виде обычной метки во время проектирования, так что вы можете расположить элемент PlaceHolder где пожелаете. Таким образом, вы можете разместить динамический элемент управления среди других элементов управления.
// Добавить кнопку в PlaceHolder.
PlaceHolder1.Controls.Add(newButton);
При использовании динамических элементов управления следует помнить, что они будут существовать только до следующей обратной отсылки. ASP.NET не будет повторно создавать динамически добавленный элемент управления. Если вам понадобится восстановить элемент управления несколько раз, следует создавать элемент управления в обработчике событий Page.Load. Это имеет дополнительное преимущество, позволяя использовать состояние вида с динамическим элементом управления. Даже если состояние вида обычно восстанавливается перед событием Page.Load, при создании элемента управления в обработчике события Page.Load ASP.NET использует любую информацию о состоянии вида по завершении этого обработчика событий. Этот процесс является автоматическим.
Если вы собираетесь взаимодействовать с элементом управления позже, ему следует присвоить уникальный идентификатор. Вы можете использовать этот идентификатор для извлечения элемента управления из коллекции Controls контейнера. Вы можете найти элемент управления с использованием рекурсивной логики поиска, что было продемонстрировано в примере дерева элементов управления, или же использовать статический метод Page.FindControl(), который ищет элемент управления с заданным вами идентификатором по всей странице.
предыдущая следующая страница оглавление
130