Идентификация элементов управления Web Forms

Visual Studio 2010

Обновлен: Ноябрь 2007

Каждый элемент управления на веб-страницах ASP.NET должен идентифицироваться уникально. Как правило, чтобы уникально идентифицировать элемент управления, его свойству ID присваивается некоторое значение. Это значение становится именем экземпляра данного элемента управления, т. е. именем, с помощью которого можно сделать ссылку на элемент управления в коде. Например, если присвоить свойству ID элемента управления TextBox значение Text1, можно сделать ссылку на элемент управления в коде как на Text1.

Несколько элементов управления с привязкой к данным, включая элементы управления DataList, Repeater, GridView, FormView и DetailsView, действуют как контейнеры для других (дочерних) элементов управления. Во время выполнения эти элементы управления создают несколько экземпляров дочерних элементов управления. Например, при создании шаблона DataList с включенным в него элементом управления Label при выполнении страницы существует столько экземпляров этого элемента управления Label на странице, сколько существует записей в источнике данных элемента управления DataList.

1d04y8ss.alert_note(ru-ru,VS.100).gifПримечание.

В элементах управления, использующих шаблоны, например, в элементах управления DataList и Repeater, размещаются объекты шаблонов. Например, элемент управления DataList, во время работы создает несколько экземпляров класса DataListItem. Эти объекты шаблонов, в свою очередь, содержат отдельные элементы управления, например метки, текстовые поля, кнопки и т. п.

Поскольку экземпляры элементов управления можно создавать несколько раз на одной странице, а имена элементов управления можно повторно использовать на других страницах, платформа веб-страниц ASP.NET предоставляет механизмы, обеспечивающие уникальность идентификаторов элементов управления на странице и в приложении. Она также предоставляет способы поиска этих отдельных элементов управления, чтобы ими можно было управлять в коде.

Элементы управления, которые могут выступать в качестве контейнеров для других элементов управления, создают контейнер имен или пространство имен идентификаторов для дочерних элементов управления. Предоставляя этот контейнер имен, элементы управления обеспечивают уникальность атрибутов идентификаторов дочерних элементов управления в пределах всего приложения. (Элементы управления создают контейнер имен путем реализации интерфейса INamingContainer.) Если дочерние элементы управления создаются во время выполнения, контейнер имен объединяется со свойством ID дочернего элемента управления, чтобы создать значение свойства UniqueID каждого дочернего элемента управления. Таким образом, свойство UniqueID становится полным идентификатором элемента управления. Оно ссылается на контейнер имен, а также на отдельное значение кода этого элемента управления.

В приведенном выше примере несколько экземпляров элемента управления Label создаются в контейнере имен (пространстве имен) родительского элемента управления DataList. Свойство UniqueID каждого элемента управления Label будет отражать данное пространство имен, которое будет иметь приблизительно такой формат: DataList1:_ctl:MyLabel, DataList1:_ct2:MyLabel, и так далее.

1d04y8ss.alert_note(ru-ru,VS.100).gifПримечание.

Не следует создавать код, ссылающийся на элементы управления с помощью значения созданного свойства UniqueID. Со свойством UniqueID можно обращаться как с обработкой (например, путем передачи его в процесс), но не следует полагаться на то, что оно имеет определенную структуру.

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

Дочерние элементы управления могут ссылаться на контейнер имен через свойство NamingContainer. Данное свойство возвращает объект типа Control, который можно преобразовать к соответствующему элементу управления DataList, объекту DataListItem и т. д.

Рекомендуется ссылаться на контейнер имен, когда нужен доступ к свойству элемента управления контейнером из дочернего элемента управления. Например, можно получить доступ к объекту DataBinding путем получения его из контейнера имен в обработчике для события DataItem дочернего элемента управления.

1d04y8ss.alert_note(ru-ru,VS.100).gifПримечание.

Свойство NamingContainer не обязательно обращается к тому же элементу управления, что и свойство Parent. Например, в элементе управления Repeater может использоваться шаблон элемента, содержащий таблицу, которая, в свою очередь, содержит элемент управления Label. Родительским элементом метки является ячейка таблицы (например, объект HtmlTableCell), однако контейнером имен является объект DataListItem, поскольку именно DataListItem, а не таблица, определяет пространство имен для элемента управления Label.

Если страница содержит элементы управления, созданные во время выполнения (такие как элементы управления в шаблоне для элементов управления DataList, Repeater или GridView, невозможно непосредственно ссылаться на них по их идентификатору, поскольку он не уникален. Однако существуют различные способы поиска отдельных элементов управления на странице. Дополнительные сведения см. в разделе Доступ к элементам управления ASP.NET программными средствами.

Показ: