2010-01-06 7 views
3

컨트롤을 사용하여 페이지에서 처리 할 이벤트를 발생시키는 일부 단추가 포함 된 간단한 사용자 정의 컨트롤이 있습니다. 나는 같은 내 코드 설정을 가지고 :asp.net 사용자 컨트롤 이벤트 전파 문제

public event EventHandler Cancel; 
public event EventHandler Confirm; 
public void Confirm_Click(object sender, EventArgs e) 
{ 
    if (Confirm != null) 
     Confirm(this, e); 
} 
public void Cancel_Click(object sender, EventArgs e) 
{ 
    if (Cancel != null) 
     Cancel(this, e); 
} 

하지만 컨트롤의 페이지로드 이벤트를 사용하는 페이지에서 다음을 호출 할 때 나는

ASPX 코드

사용자 정의 이벤트

중 하나를 얻을하지 않습니다
<%@ Register TagPrefix="btg" TagName="CustomControl" Src="~/Search/CustomControl.ascx" %> 
<btg:CustomControl ID="btgControl" runat="server" ></btg:CustomControl> 

사용자 정의 컨트롤의 버튼이 업데이트 패널에있을 수 있습니까?

+1

페이지 코드가 필요합니다. 컨트롤의 유형을 올바르게 캐스팅하고 있습니까? – womp

답변

1

당신은 방법을 보지 않아야합니다. 당신은 이벤트를보아야합니다. 부모 페이지의로드에서

, 당신은이 작업을 수행 할 필요가 : 당신은 탭에 탭을 칠 수

myUserControl.Cancel += new EventHandler(myUserControl_Cancel); 

메소드 스텁을 자동으로 생성. 그러면 다음과 같이 표시됩니다.

void myUserControl_Cancel(object sender, EventArgs e) {} 

그런 다음이 코드는 사용자 정의 컨트롤에서 호출 된 후에 실행됩니다. 코드가 실행되게하려면 사용자 컨트롤의 버튼 이벤트에 이벤트를 할당해야합니다.

편집 : myUserControl은 사용자 정의 컨트롤의 ID입니다. 또한 이벤트 처리기가 페이지의 init 메소드에 있어야한다고 주장하는 사용자도 있습니다.

편집 :

페이지에서 사용자 정의가 제대로 참조되고 있습니까? 즉, web.config에 사용자 정의 컨트롤을 등록하거나 페이지의 참조 지시문을 사용하고 있습니까?

또한 솔루션을 정리하고 다시 빌드 해 보셨습니까? 사용자 정의 컨트롤이 동적으로 생성 /로드되는 경우 인스턴스화 된 컨트롤과 동일한 범위에서 이벤트를 연결해야합니다. 사용자 정의 컨트롤을 동적으로로드하려면 페이지에 자리 표시자를 넣고 다음을 수행해야합니다.

UserControl control = Page.LoadControl("~/ControlPath/ControlName.ascx"); 
((MyUserControlClass)control).Cancel += += new EventHandler(myUserControl_Cancel); // etc... 
+0

이것은 내가 말하려는 것입니다, 부모님 페이지에 나와있는 이벤트가 없습니다. – Jimmy

+0

죄송합니다. 원래 게시물에서 직접 메소드에 액세스하려고 시도했다고 가정했습니다. 인텔리 센스에 게재되지 않고 있다는 뜻입니까? 내 대답을 몇 가지 가능성으로 업데이트했습니다. 컨트롤이 추가되고 page_load가있는 곳에서 aspx 코드를 게시 할 수 있습니까? –

+0

내가 다시 작성하고 내 솔루션을 몇 번 청소, 컨트롤이 제대로 호출되고 내가 그것을 찾아 볼 때 페이지에로드됩니다, 그 페이지에서 ID 대신 사용자 정의 컨트롤의 이름을 사용하여 하나의 실수가 있었지만 여전히 어떤 이벤트에 액세스 할 수 없다면 코드를 통해 컨트롤을로드 할 때 – Jimmy