다음을 통해 공유


Web Forms 컨트롤 식별

업데이트: 2007년 11월

ASP.NET 웹 페이지의 모든 컨트롤은 고유하게 식별할 수 있어야 합니다. 일반적으로 컨트롤의 ID 속성에 값을 할당하여 해당 컨트롤을 고유하게 식별합니다. 이 값은 컨트롤의 인스턴스 이름, 즉 코드에서 컨트롤을 참조하는 데 사용할 수 있는 이름입니다. 예를 들어 TextBox 컨트롤의 ID 속성을 Text1으로 설정하면 코드에서 이 컨트롤을 Text1으로 참조할 수 있습니다.

DataList, Repeater, GridView, FormViewDetailsView 컨트롤을 포함한 여러 데이터 바인딩된 컨트롤은 다른(자식) 컨트롤의 컨테이너로 사용됩니다. 이러한 컨트롤이 실행되면 자식 컨트롤의 인스턴스가 여러 개 생성됩니다. 예를 들어 Label 컨트롤이 포함된 DataList 템플릿을 만드는 경우 페이지가 실행되면 DataList 컨트롤의 데이터 소스에 있는 레코드 수만큼 Label 컨트롤의 인스턴스가 페이지에 만들어집니다.

참고:

DataListRepeater처럼 템플릿을 사용하는 컨트롤은 템플릿 개체를 호스팅합니다. 예를 들어 DataList 컨트롤이 실행되면 DataListItem 클래스의 인스턴스가 여러 개 만들어집니다. 이러한 템플릿 개체에는 레이블, 텍스트 상자, 단추 등과 같은 개별 컨트롤이 포함되어 있습니다.

같은 페이지에서 컨트롤을 여러 번 인스턴스화할 수 있고 다른 페이지에서 컨트롤 이름을 다시 사용할 수 있으므로 ASP.NET 페이지 프레임워크에서는 페이지와 응용 프로그램에 포함된 컨트롤에 고유 식별자를 할당할 수 있는 메커니즘을 제공합니다. 또한 이러한 개별 컨트롤을 사용자 코드에서 조작할 수 있도록 컨트롤을 찾는 방법도 제공합니다.

명명 컨테이너

다른 컨트롤의 컨테이너로 사용할 수 있는 컨트롤은 자식 컨트롤에 대해 명명 컨테이너 또는 ID 네임스페이스를 생성합니다. 이 명명 컨테이너를 제공하면 해당 자식 컨트롤의 ID 특성을 전체 응용 프로그램 내에서 고유하게 유지할 수 있습니다. 컨트롤에서는 INamingContainer 인터페이스를 구현하여 명명 컨테이너를 생성합니다. 런타임에 자식 컨트롤이 만들어지면 명명 컨테이너와 자식 컨트롤의 ID 속성이 결합되어 각 자식 컨트롤의 UniqueID 속성 값이 만들어집니다. 따라서 UniqueID 속성은 컨트롤의 정규화된 식별자로 사용되어 해당 컨트롤의 개별 ID 값과 명명 컨테이너를 모두 참조합니다.

위의 예제에서는 부모 DataList 컨트롤의 명명 컨테이너, 즉 네임스페이스 내에서 Label 컨트롤의 여러 인스턴스가 만들어집니다. 각 Label 컨트롤의 UniqueID 속성은 이 네임스페이스를 반영하여 DataList1:_ctl:MyLabel, DataList1:_ct2:MyLabel 등의 형식으로 되어 있습니다.

참고:

생성된 UniqueID 속성의 값을 사용하여 컨트롤을 참조하는 코드는 작성하지 마십시오. 예를 들어 UniqueID 속성을 프로세스에 전달하는 것처럼 이 속성을 핸들로 처리할 수 있지만 특정 구조를 사용하는 속성에 의존하면 안 됩니다.

자식 컨트롤에 명명 컨테이너를 제공하는 각 컨테이너 컨트롤과 마찬가지로 페이지 자체에서도 모든 자식 컨트롤에 명명 컨테이너를 제공합니다. 따라서 응용 프로그램 내에서 해당 페이지의 모든 컨트롤에 대해 고유한 네임스페이스가 만들어집니다.

NamingContainer 속성 사용

자식 컨트롤에서는 NamingContainer 속성을 통해 명명 컨테이너를 참조할 수 있습니다. 이 속성은 적절한 DataList 컨트롤, DataListItem 개체 등으로 캐스팅할 수 있는 Control 형식의 개체를 반환합니다.

자식 컨트롤에서 컨테이너 컨트롤의 속성에 액세스해야 할 경우 명명 컨테이너를 참조하면 유용합니다. 예를 들어 자식 컨트롤의 DataBinding 이벤트에 대한 처리기를 사용할 때 명명 컨테이너에서 DataItem 개체를 가져와 개체에 액세스할 수 있습니다.

참고:

NamingContainer 속성은 Parent 속성에서 참조하는 것과 동일한 컨트롤을 참조하지 않을 수도 있습니다. 예를 들어 Repeater 컨트롤의 경우 Label 컨트롤이 들어 있는 테이블이 포함된 항목 템플릿을 사용할 수도 있습니다. 레이블의 부모 컨트롤은 테이블 셀(예: HtmlTableCell 개체)이지만 Label 컨트롤의 네임스페이스를 정의하는 것은 테이블이 아니라 DataListItem이므로 명명 컨테이너는 DataListItem 개체입니다.

컨트롤 참조

런타임에 생성되는 컨트롤(DataList, Repeater 또는 GridView 컨트롤에 대한 템플릿에 포함된 컨트롤 등)이 페이지에 포함되어 있는 경우, 해당 컨트롤의 ID가 고유하지 않으므로 이러한 컨트롤을 ID로 직접 참조할 수 없습니다. 그러나 다양한 방법으로 페이지에서 개별 컨트롤을 찾을 수 있습니다. 자세한 내용은 프로그래밍 방식으로 ASP.NET 컨트롤 액세스를 참조하십시오.

참고 항목

개념

Web Forms 컨트롤 ID 확인