asp.net의 사용자 지정 서버 컨트롤에 메서드 이름을 전달하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/33150

문제

저는 다른 제어를 확장하는 고객 서버 제어를 작업 중입니다.양식의 다른 컨트롤에 첨부해도 문제가 없습니다.

vb.net : Parent.FindControl(TargetControlName)

ASPX 마크 업의 컨트롤에 메서드를 전달하고 싶습니다.

예 : <c:MyCustomerControl runat=server InitializeStuffCallback="InitializeStuff">

그래서 리플렉션을 사용하여 부모로부터 주어진 메서드 이름에 액세스하려고했습니다.

(VB에서) 라코 디스

방법은 페이지에서 떨어져 있지 않기 때문에 찾을 수 없습니다.어디를 찾아야합니까?다른 컨트롤이 비슷한 기능을 수행하는 것을 보았 기 때문에 이것이 가능하다고 확신합니다. <시간>

말하는 것을 잊었습니다. 제 해결 방법은 컨트롤 이벤트를 제공하고 코드 숨김에 첨부하는 것입니다.

도움이 되었습니까?

해결책

ASPX 마크 업에서 메서드를 전달하려면 이벤트의 코드에서 Browsable 속성을 사용해야합니다.

VB.NET 라코 디스

C # 라코 디스

참조 : 구성 요소의 디자인 타임 속성 BrowsableAttribute 클래스

모든 이벤트, 속성 또는 컨트롤의 코드 숨김에 있어야하는 모든 항목은 browsable 속성으로 만들어 태그 코드에서 변경할 수 있습니다.

다른 팁

일반적으로 리플렉션을 통해 방법을 얻을 필요가 없습니다.사용자 컨트롤 내에서 공개 이벤트를 정의합니다 (죄송합니다. vb 구문을 모르기 때문에 C #으로 표시됩니다) 라코 디스

이제 aspx 페이지 또는 사용자 정의 컨트롤의 컨테이너 내에서 EventHandler와 일치하는 보호 된 메서드를 정의합니다. 라코 디스

이제 마크 업 내에서 다음을 사용할 수 있습니다. 라코 디스

해결 방법이 실제로 더 나은 답입니다.컨트롤 수명주기의 특정 부분에서 실행해야하는 코드가있는 경우 이벤트를 노출하여 컨테이너가 사용자 지정 기능으로 수명주기를 확장 할 수 있도록 해야합니다 .

buyutec과 Jesse Dearing 모두 적절한 답변을 제공합니다. 라코 디스

속성 창에서 속성을 볼 수 있습니다.하지만 이벤트가 표시되지 않아 나에게 아무런 차이가 없습니다.

앞에서 간과 한 것은 태그에서 짝수 컨트롤을 참조 할 때 On 앞에 추가된다는 사실입니다.

모든 ASP.NET 페이지는 다음과 같이 Page에서 상속 된 자체 클래스 입니다. 라코 디스

따라서 Reflection을 통해 해당 메서드를 찾으려면 페이지 코드를 저장하는 페이지 클래스의 유형 인 올바른 유형을 가져와야합니다.

이 컨트롤을 인스턴스화하려면 여러 페이지를 지원해야한다고 가정합니다. 리플렉션을 통해 페이지 인스턴스의 자식 유형을 찾을 수 있다고 생각하지만 방법은 기억 나지 않지만 수행 할 수 있어야합니다.

하지만 ... 다른 사람들이 말한 것처럼 이벤트 의 목적이 바로 그러한 경우입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top