2008-08-28 5 views
1

다른 컨트롤을 확장하는 고객 서버 컨트롤에서 작업하고 있습니다. 양식의 다른 컨트롤에 연결하는 데는 아무런 문제가 없습니다. vb.net에서asp.net에서 메서드 이름을 사용자 지정 서버 컨트롤에 전달하는 방법?

: Parent.FindControl(TargetControlName)

내가 ASPX 마크 업에서 제어하는 ​​방법을 전달하고 싶습니다. 예를 들어

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

그래서, 나는 부모로부터 주어진 메소드 이름에 액세스하는 반사를 사용하여 시도했다. 그냥 떨어져 페이지 아니기 때문에

Dim pageType As Type = Page.GetType 
Dim CallbackMethodInfo As MethodInfo = pageType.GetMethod("MethodName") 

'Also tried 
sender.Parent.GetType.GetMethod("MethodName") 
sender.Parent.Parent.GetType.GetMethod("MethodName") 

방법 (VB에서) 같은

뭔가가 찾을 수 없습니다. 어디서 볼 수 있니? 나는 다른 컨트롤이 비슷한 것을 보았 기 때문에 이것이 가능하다고 확신한다.


내가 언급하는 것을 잊었다, 내 작품은 주위 제어 이벤트를 제공하고 코드 숨김에서 그들에게 연결하는 것입니다.

답변

2

ASPX 태그에서 메서드를 전달하려면 이벤트 코드에서 Browsable 특성을 사용해야합니다.

VB.NET

<Browsable(True)> Public Event InitializeStuffCallback 

C#을

[Browsable(true)] 
public event EventHandler InitializeStuffCallback; 

참조 : 어떤 필요 Design-Time Attributes for ComponentsBrowsableAttribute Class

모든 이벤트, 속성, 또는의 코드 숨김 될 수 있습니다 태그 코드에서 변경할 수 있도록 browsable 속성으로 제어하십시오.

0

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

+0

이것은 여전히 ​​가능합니다. 코드 숨김에서 제어 태그를 사용하는 대신 제어 태그에서 구성 할 수 있습니다. –

2

일반적으로 리플렉션을 통해 메소드를 가져올 필요가 없습니다. 사용자 정의 컨트롤의 내부에서, 당신의 aspx 페이지 내에서

public event EventHandler EventName; 

이제 (미안 해요는 VB에서 구문 때문에이 C#으로 될 것입니다 모른다), 또는 어떤 사용자 정의 컨트롤의 컨테이너 보호 정의한 공개 이벤트를 정의 이벤트 핸들러 일치 방법 :

protected void MyCustomerControl_MethodName(object sender, EventArgs e) { } 

지금, 당신의 마크 업 내에서, 당신은

<c:MyCustomerControl id="MyCustomerControl" runat=server OnEventName="MyCustomerControl_MethodName"> 
0

모든 ASP를 사용할 수 있습니다.NET 페이지는 Page에서 상속 자체의 수업과 같습니다 따라서

class MyPage : Page 

, 반사를 통해 그 방법을 찾을 수, 페이지를 저장하는 페이지 클래스의 유형입니다 올바른 유형을 받아야합니다 암호.

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

하지만 ... 그 밖의 모든 사람들이 말한 것처럼, 그러한 경우는 이벤트입니다.

0

buyutec과 Jesse Dearing은 모두 수용 가능한 대답을 가지고 있습니다.

[Browsable(true)] 

속성 창에서 속성을 볼 수 있습니다. 그러나 이벤트가 나타나지 않습니다. 아무런 차이가 없습니다.

이전에 간과 한 것은 컨트롤을 태그에서 참조 할 때 준비가 끝난다는 사실이었습니다.