Every control on an ASP.NET Web page must be uniquely identifiable. Generally, you assign a value to a control's
Text1, you can reference the control in code as
A number of data-bound controls, including the
Controls that use templates, such as the DataList and Repeater controls, host template objects. For example, when the DataList control runs, it creates multiple instances of the
Because controls can be instantiated multiple times on the same page, and because you can reuse control names on different pages, the ASP.NET page framework provides mechanisms to ensure that controls on the page and in your application have unique identifiers. It also provides you with ways to find these individual controls so that you can manipulate them in your own code.
The Naming Container
Controls that can act as containers for other controls generate a naming container, or an ID namespace, for their child controls. By providing this naming container, controls can guarantee that ID attributes of their child controls are unique within the entire application. (Controls generate a naming container by implementing the
In the example from above, the multiple instances of the Label control are created within the naming containerВ вЂ” the namespaceВ вЂ” of the parent DataList control. The UniqueID property of each Label control will reflect this namespace, which will have a format something like
DataList1:_ct2:MyLabel, and so on.
Do not write code that references controls using the value of the generated UniqueID property. You can treat the UniqueID property as a handle (for example, by passing it to a process), but you should not rely on it having a specific structure.
In addition to each container control providing a naming container for its child controls, the page itself also provides a naming container for all of its child controls. This creates a unique namespace within the application for all the controls on that page.
Using the NamingContainer Property
Child controls can reference their naming container via the
Referencing the naming container is useful when you need access from a child control to a property of the container control. For example, in a handler for a child control's
The NamingContainer property does not necessarily reference the same control as the
If your page contains controls that are generated at run time, such as those in a template for the DataList, Repeater, or GridView controls, you cannot directly reference them by their ID, because the ID is not unique. However, there are various ways to find individual controls in the page. For details, see Accessing ASP.NET Controls Programmatically.