2010-08-18 2 views
2

컨트롤의 이름을 나타내는 문자열에서 .NET 컨트롤 (ASP.NET에서)을 만들어야합니다..NET 동적으로 제어 이름으로 가져 오기

Control myList = SomeSystemClass.GetControlByName("DropDownList"); 

.NET 플랫폼에는이 방법을 사용할 수있는 방법이 있습니다. 그러나 어느 것이 좋을지는 모르겠습니다. 어떤 아이디어?

+0

하는 당신은 만들 수 없습니다 : 사용자 컨트롤

string ctrlName = "DropDownList"; Control c = Page.ParseControl("<asp:" + ctrlName + " runat='server' />"); 

통제 수단 'HttpContext'가 없으면 이것처럼. 시나리오를 설명하는 것이 좋습니다. –

+0

또한 사용자 지정 (서버) 컨트롤 또는 사용자 컨트롤 인 경우 추가하십시오. –

+0

이것은 ASP.NET 서버 컨트롤입니다. – asmo

답변

1

:

Control c = Page.ParseControl("<asp:DropDownList runat='server' />"); 

또는 더 구체적으로 귀하의 예를 들면 다음과 같습니다

MyControl myControl1 = (MyControl)LoadControl("TempControl_Samples1.ascx"); 
1

Type.GetType() 오버로드 중 하나와 Activator.CreateInstance을 결합하여 설명하는 것처럼 팩토리 메서드를 만들어야한다고 생각합니다.

관련 문서 :

편집이 유형을 사용할 수있는 경우, 그 코드 스 니펫에 표시된대로 캐스트하면 반사가 절대적으로 필요하지 않습니다. 변수를 DropDownList으로 선언 할 수있는 능력이 있다면 = new DropDownList();을 포함하고이를 쉽게 호출하는 것이 훨씬 쉽습니다.

편집 2 잠시 동안 귀하의 의도를 정확하게 알고있는 게시물이있었습니다. 이 이미 존재하는 컨트롤을 찾고이라는 이름 지정 컨테이너 (페이지 일 수도 있고 데이터 바인딩 된 컨트롤 일 수도 있음)에 대한 핸들이있는 경우 FindControl 메서드로 컨트롤을 검색 한 다음 관련 유형으로 캐스트.

관련 문서 : 서버 컨트롤의 경우 http://msdn.microsoft.com/en-us/library/486wc64h.aspx

관련 문제