2013-10-14 8 views
2

나는 나중에 폼의 값을 다시 채울 수 있도록 주어진 부모 내부의 모든 폼 입력 컨트롤을 샅샅이 뒤 지르는 제네릭 함수를 작성하려고합니다.C# .net에서 ClientID로 컨트롤을 찾는 방법은 무엇입니까?

나는 쿠키에 각 컨트롤의 IDVALUE를 저장하고, 나는 그 값을 설정하기 전에 컨트롤을 찾을 수 FindControl(ID)를 사용하여 컨트롤을 다시 채 웁니다.

자식 컨트롤이있는 usercontrol 인스턴스가 여러 개인 경우를 제외하고 모두 정상적으로 작동합니다. 나는 두 DATERANGE 컨트롤 ...

<my:daterange id="DateRangeA" /> 
<my:daterange id="DateRangeB" /> 

이있는 경우 예를 들어

는 DATERANGE 제어는 지금이 ..., 두 개의 텍스트 상자 ... 내 양식에 다음

<asp:TextBox ID="txtDateFrom" /> 
<asp:TextBox ID="txtDateTo" /> 

을 정의 ID가 txtDateFrom (및 2x txtDateTo) 인 텍스트 상자는 쿠키에 두 값을 모두 저장할 수 없으며 ID가 고유하지 않으므로 FindControl()을 사용하여 컨트롤을 다시 검색 할 수 없습니다.

내가 좋아하는 것은 FindControl(ID)과 비슷하지만 대신 CLIENTTID를 사용하여 다른 usercontrols 내부의 동일한 ID를 가진 자식 컨트롤을 구별 할 수 있습니다.

모든 컨트롤에 수동으로 전체 경로를 저장하고 (어떤 식 으로든) FindControl(IDa).FindControl(IDb).FindControl(IDc)... (또는 무엇이든)을 사용하여 자식 컨트롤까지 드릴 다운해야한다는 생각에 저는 겁니다.

더 간단한 방법이 있어야합니다. 맞습니까?

아니면이 모든게 잘못 되었습니까? 고마워, 고마워.

답변

2

컨트롤이 기사에 따르면 INamingContainer interface

을 구현합니다 :

이 인터페이스를 구현하는 모든 컨트롤이 모든 자식 컨트롤의 ID 속성은 고유성을 보장받을 수 있습니다 에 새로운 네임 스페이스를 만드는 내 전체 응용 프로그램.

또한 article을 확인하십시오.

+0

흠. 이제는 HTML 요소에 렌더링 된 ID가 실제로 유일하지만 코드 숨김에 액세스 할 수있는 ID는 변경되지 않았습니다. 조언 해 주셔서 감사합니다. 그 동안, 필자는 (해킹 된) 해결 방법을 선택하고 필요 여부에 상관없이 모든 컨트롤을 'PARENTID + ">"+ ID "로 저장했습니다. 따라서 다음은 일관되게 사용할 가능성이있는 컨트롤을 찾는 데 충분합니다. FindControl (PARENTID) .FindControl (ID)' – Bumpy

관련 문제