2011-09-14 5 views
1

aspx 파일을 가지고 있고 그 안에 렌더링 된 ascx 컨트롤이 있습니다.부모님의 이벤트에 어떻게 접속할 수 있습니까?

aspx 파일에는 클릭하면 이벤트가 발생하는 버튼이 있습니다.

ascx 컨트롤에서 같은 이벤트에 연결하고 싶은 버튼이 있습니다.하지만 어떻게해야하는지 명확하지 않습니다. 나는 분명히 초등 학생 무언가를 놓치고있다. 내가 잘못 짚었있어 경우에 저 궁금하게하는, 내가 지금까지 운이 했어,

myButton.Click += new EventHandler(btn_Click); 

... 

void btn_Click(object sender, EventArgs e) 
{ 
    <some way to get ahold of the parent aspx>.btn_Click(sender, e) 
} 

을하지만 :

내가는이 같은 것 생각했다.

아이디어가 있으십니까?

+1

로직을 별도의 클래스로 캡슐화하고 두 경우 모두 호출해야하는 이유는 무엇입니까? – V4Vendetta

+0

부모 페이지에서 모든 값을 가져 와서 저장하는 것이 너무 복잡한 논리는 아니기 때문에. 따라서 로직을 다른 곳에 캡슐화하는 것은 많은 양의 값을 보내어 너무 많은 코드를 실행하지 않는 것을 의미합니다. – Beska

+0

상위 페이지의 버튼에 액세스 할 수 있습니까? – sll

답변

2

는이 같은 사용자 정의 컨트롤에 이벤트 처리기를 만들어야합니다

ASCX 마크 업 :

<asp:Button ID="UserControlButton" runat="server" OnClick="UserControlButton_Click" /> 

ASCX 코드 숨김 :

public event EventHandler ButtonClick; 

protected void UserControlButton_Click(object sender, EventArgs e) 
{ 
    if (ButtonClick != null) 
     ButtonClick(sender, e); 
} 

를 페이지에서 :

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" /> 
<uc:MyUserControl ID="UserControl1" runat="server" OnButtonClick="Button1_Click" /> 

N 페이지 뒤에 코드 :

protected void Button1_Click(object sender, EventArgs e) 
{ 
    //if you need to differentiate one button from the other 
    if (sender.Equals(Button1)) 
    { 
     //page button logic 
    } 
    else 
    { 
     //user control button logic 
    } 
} 
+0

나는 당신이 질문의 한 점을 놓쳤다는 것에 대한 논평에 맞다고 믿는다. 덕분에 – sll

+0

이것은 그것을 못 박았습니다. 나는 핵심 요소가 여전히 빠져 있다고 생각하는데, 그것이 정확히 어떻게 작용했는지 확신 할 수 없다.사용자 정의 컨트롤의 OnButtonClick 특성은 이름을 통해 ButtonClick EventHandler에 자동 연결됩니다. 그게 맞습니까? 조. 나는 지식에 구멍이났다. 확실히 돌아가서 틈을 메울 시간. – Beska

+0

usercontrol의 이벤트 핸들러는 사용자 정의 컨트롤의 버튼을 클릭하면 시작됩니다. 이 이벤트 핸들러는 또한 사용자 정의 컨트롤에서 페이지로 이벤트를 노출합니다.이 이벤트는 페이지의 단추 클릭 이벤트로 처리 할 수 ​​있습니다. 나는 그 소리가 혼란 스럽다는 것을 알고 있지만 그것이 합리적입니까? –

0

당신의 UserControl에 추가 :

public Action<object,EventArgs> onMyButtonClick { get; set; } 

... 

protected void Page_Load(object sender, EventArgs e) 
{  
    btn.Click += (s,ea) => { onMyButtonClick(sender, e); }; 
}  

당신의 .aspx 페이지 추가 기능에서이 같은

protected Action<object,EventArgs> myClickAction = (s, a) => { /* your handling code goes here */ }; 

... 

protected void Page_Load(object sender, EventArgs e) 
{  
    myUserControlName.onMyButtonClick = myClickAction; 
    btn.Click += (s,ea) => { myClickAction(s,ea); }; 
} 

뭔가가 작동합니다. (참고 :이 코드는 테스트되지 않았으므로을)

+0

나는 Action delegate 대신에'EventHandler'를 사용할 것이다. 그렇습니다. 그러나 그것들은 동일하지만 EventHandler는 몇 년 동안 표준 표준이었고 대신 Action을 사용하는 코드 만 복잡합니다. – Kasaku

+0

@PirateKitten 나는 액션을 사용하여 코드를보다 간결하게 만들 수 있다고 동의한다. 코드를 좀 더 간결하게 업데이트했다. 그것은 또한 프로그래밍의 더 기능적인 스타일이고 내 의견으로는 더 읽기 쉽습니다. 또한 허용 된 답변을 확인하고,이 작업을 수행하기 위해 4 개의 파일로 이동해야합니다. 내 솔루션으로, 단지 2 코드 뒤에. 일어나는 일을 한 눈에 볼 수 있습니다. –

+0

4 개의 파일에 영향을 미치지 * 않습니다 *, 당신은 CS로 Page_Load에있는 핸들러에 쉽게 연결할 수 있습니다. – Kasaku

관련 문제