2009-07-14 3 views
1

추가, 편집 및 나열 개체를 나타 내기 위해 .ascx 컨트롤 세 개를로드하는 .aspx 페이지가 있습니다. 현재는 가시성을 바꿔 페이지를 전환하는 컨트롤을 활성화/비활성화합니다.웹 컨트롤은 해당 부모에 속한 속성을 편집 할 수 있습니까?

그러나 개체를 그리드 뷰에 표시 할 때 각 옆에있는 기본 "편집"버튼을 제공합니다. 이 버튼을 클릭하면 분명히 해당 사용자의 편집 컨트롤이로드됩니다. 이 기능은 상위 페이지가 아니라 컨트롤 안에 있습니다.

자식 컨트롤에서 발생하는 이벤트를 기반으로 부모의 특성을 수정할 수 있습니까? 예를 들어 가시성을 변경하고 다른 하위 컨트롤을 활성화/비활성화합니다.

답변

2

예, 가능합니다. 우리는 C# 프로젝트에서이를 성공적으로 수행하고 있습니다. 나는 같은 일이 vb.net에 적용된다고 생각한다.

각 사용자 정의 컨트롤에는 호스팅되는 페이지를 나타내는 페이지라는 속성이 있습니다. 변경할 속성이나 호출 할 메서드를 표시하는 인터페이스를 만듭니다. 사용자 정의 컨트롤을 호스팅하는 각 페이지에서 해당 인터페이스를 구현하도록하십시오. 구현은 분명히 페이지의 올바른 컨트롤에 영향을 주어야합니다.

그런 다음 Page 속성을 해당 인터페이스로 유형 변환하고 속성을 설정하십시오.

interface IUpdatePage { 
    void ChangeButton(String toValue); 
} 

public class MyPage : Page, IUpdatePage { 
    public void ChangeButton(String toValue) { 
     // do something interesting 
    } 
} 

public class MyUserControl : UserControl { 
    public void UpdateParent() { 
     var pageLink = (Page as IUpdatePage); 
     pageLink.ChangeButton("some value"); 
    } 
} 
+0

매우 흥미 롭습니다. 나는 이것에 대해 알아 보겠습니다! – Chris

+0

참고로, 이것은 분명히 모든 서버 측입니다. Robert Harvey는 클라이언트 측 솔루션을 갖고있는 것 같습니다. – NotMe

+0

이 작업을 수행 할 수 있도록 Page 클래스의 요소를 찾을 수 없었습니다. 우연히, Page 클래스에 속한 Parent 클래스에 액세스합니까? – Chris

0

Javascript 또는 JQuery를 사용하여 브라우저에서 수행 할 수 있습니다.

document.getElementById("myID").style.visibility="visible"; 
document.getElementById("myID").style.visibility="hidden"; 

Codebehind 이벤트는 일반적으로 Ajax를 사용하지 않는 한 포스트 백이 발생할 때까지 대기/지연됩니다. Ajax를 사용하는 경우 가시성 변경이 필요한 양식 부분을 다시 렌더링 할 수 있습니다.

+0

하는 것이 유용 할 수 있습니다 : 예를 들어
는 (다시, 이것은 C#을 확인하지 VB.Net에 해당이 무엇이다)! 이걸 시험해 볼게. – Chris

0

나는 당신의 흐름을 이해할 수 없다고 생각합니다. 그리드에서 수정 버튼을 클릭하면 정확히 무슨 일이 발생합니까? ItemCommand 이벤트가 발생하고 편집 컨트롤을 찾아서 표시하거나로드하고 표시합니다. 그 맞습니까?

그런 다음 어떤 상황에서 편집 컨트롤이 부모의 속성을 변경하려고합니까?

+0

그리드에서 편집 버튼을 클릭하면 해당 행의 ID를 저장하고 list.ascx 컨트롤에서 가시성을 false로 설정 한 다음 행 ID의 정보로 edit.ascx를 활성화/표시합니다. – Chris

관련 문제