2010-07-30 6 views
0

다른 사용자 정의 컨트롤에서 사용자 정의 컨트롤의 public 속성에 액세스하려고합니다. 그러나 다른 사용자 컨트롤에 액세스 할 수 없습니다. 네임 스페이스 'ASP'를 사용한 후에도 현재 사용자 정의 컨트롤에 대한 참조 만 볼 수 있습니다.다른 사용자로부터 ASP.NET 사용자 정의 컨트롤을 호출 할 수 없습니다.

그러나 페이지에서는 ASP 네임 스페이스가있는 모든 사용자 컨트롤을 참조 할 수 있습니다.

내가 누락되었거나 그런 식으로해야합니까?

업데이트 : 여기에 정확한 시나리오 -
나는 두 사용자가 둘 다이 페이지에서 Default.aspx에 사용되는 지금 A와 B를 제어합니다. A에서 클릭 된 컨트롤의 이름을 보유하고있는 컨트롤 A에 대한 공개 proprty가 있습니다. 컨트롤 B에서이 속성에 액세스하여 일부 결정을 내리고 싶습니다. 당신이 제안한 제안에 따라 컨테이너 페이지의 FindControl 메서드에 의해 컨트롤에 도달하는 것을 이해할 수 있지만 B에서 컨트롤 A에 대한 참조를 가져올 수 없을 때 속성 컨트롤을 캐스팅하여 속성 값을 가져 오는 방법은 무엇입니까?

도움 주셔서 감사합니다.

+3

나는 뭔가를 놓친다 고 생각합니다. 어쩌면 두 개의 사용자 정의 컨트롤의 관련 코드를 게시하고 페이지에서 사용하는 방법을 알려주십시오. –

+0

^^ 업데이트 된 질문에 대한 설명이 명확 해지길 바랍니다 ... – Dienekes

답변

2

하나의 사용자 정의 컨트롤은 다른 사용자 정의 컨트롤에 대해 알 필요가 없습니다 (물론 포함 된 자식 컨트롤은 예외입니다). ControlABC가 ControlXYZ를 참조한 경우 해당 페이지에도 ControlXYZ 인스턴스가 없으면 ControlABC를 결코 사용할 수 없습니다. ControlABY를 재사용 할 수있는 능력이 현저하게 손상 될 수 있습니다.

이 문제를 해결하는 한 가지 방법은 이벤트를 사용하여 두 컨트롤 간의 연결을 "연결"하는 것입니다. 그렇게하면 ControlABY는 ControlXYZ에 대한 강력한 의존성을 갖지 않습니다. ControlXYZ가없는 페이지에서도 쉽게 재사용 할 수 있습니다. 이 페이지는 두 컨트롤 간의 연결을 관리하고 ControlXYZ의 대리자를 ControlABC의 이벤트에 추가하여 두 컨트롤이 통신 할 수 있도록합니다.

이벤트/대리자와 비교하여 장단점이있는 강력한 종속성을 도입하지 않고 컨트롤이 서로 상호 작용할 수있는 다른 기술이있을 수 있습니다. 다른 SO 회원들은 그들을 지적 할 것입니다.

+0

글쎄, "그 페이지가 ControlXYZ의 인스턴스를 가지고 있지 않으면 어떤 페이지에서도 ControlABC를 사용할 수 없다"... 컨트롤이 무엇인지 알지 못한다면 그것은 합리적으로 합당 할 것입니다. – Jay

0

정확히 그렇게해야합니다.

내 생각에 사용자 컨트롤 하나를 다른 것과 연결하는 것은 좋지 않은 것처럼 보입니다. 두 가지가 모두 페이지에 존재 함을 보장 할 방법이 없습니다.

주위에 다른 방법이 없다면 사용자 정의 컨트롤은 페이지에 액세스 할 수 있습니다. 그런 다음 Page.FindControl을 사용하여 다른 사용자 정의 컨트롤을 찾고 그런 식으로 공용 속성에 액세스 할 수 있습니다.

+0

한 사용자/두 사용자 컨트롤 모두 인터페이스를 구현하는 것은 반드시 나쁜 것은 아닙니다. –

+0

하지만 공용 속성에 액세스하려면 해당 CoBtrol에 캐스팅해야하며 어떻게 참조해야합니까? – Dienekes

0

"네임 스페이스"는 "범위"와 다릅니다. 네임 스페이스는 클래스 정의를 orden하는 방법 일뿐입니다. 범위는 코드에서 특정 지점에서 볼 수있는 변수 (인스턴스)입니다.

다른 사용자 컨트롤이 같은 페이지에 있습니까? (그렇지 않다면 전혀 작동하지 않을 것입니다). 현재 사용자 컨트롤에서 페이지까지 이동해야합니다. 거기에서 다른 usercontrol을 찾을 수 있습니다.

관련 문제