2010-05-03 4 views
2

내가 만든 사용자 정의 컨트롤 (.cs 파일이 아니라 .ascx 파일)을 사용하고 있는데, 이는 일부 마법을 수행하고 컨트롤에 의해 생성 된 값에 따라, 컨트롤을 '호스팅'하는 상위 페이지에서 무언가를해야합니다. 특정 상황에서 메서드를 호출해야합니다 (메서드는 부모 컨트롤에 있음).사용자 컨트롤에서 부모 페이지에 대한 메서드 호출

컨트롤과 같이 상위 페이지에 배치됩니다 : 나는 동적으로 컨트롤 자체 만에 등 버튼을 만드는거야

<customtag:MyControl ID="something" runat="server" /> 

버튼을 클릭 할 때의가 텍스트 상자가 있다고 예를 들어 가정 해 봅시다 컨트롤 및 텍스트 상자의 값을 "밥"컨트롤이 들어있는 페이지에서 메서드를 호출해야합니다 ... 어떻게 이것을 수행 할 수 있습니까?

답변

3

당신은 일 수 있습니다.는 casperOne이 제안한 바를 수행하지만, 저는 조언하지 않습니다. 이렇게하면 사용자 컨트롤이 부모 페이지에 밀접하게 결합되어 사용자 컨트롤의 목적에 위배됩니다.

개인적으로 상위 페이지에서 처리 할 수있는 이벤트 (예 : ButtonClicked)를 이벤트에 추가합니다. 부모의 이벤트 처리기에서 이벤트를 처리하지만 적합하다고 판단 할 수 있습니다. 이렇게하면 나중에 다른 페이지에 사용자 정의 컨트롤을 연결할 수 있으며 에 특정 부모 페이지 종류 인이 필요하다는 사용자 정의 컨트롤의 논리를 염려 할 필요가 없습니다.

0

Parent property을 통해 컨트롤을 호스팅하는 페이지를 가져올 수 있어야합니다. 그러나, 그것은 통제로 당신에게 돌려 보내질 것입니다. 정의한 페이지의 메소드에 액세스하려면 페이지 유형으로 변환해야합니다.

0

나는 casperOne이 올바른 방향으로 가고 있다고 생각하지만, 앞으로 나아가 야합니다. 이 사용자 정의 컨트롤이 페이지에 더 많이 사용될 것이라고 가정합니다. 이제

public class PageToInheritFrom : System.Web.UI.Page { 
    public void SpecialFunction() { 
    }  
} 

있는지 확인을 :

것은 (프로젝트 당신을 App_Code 디렉토리 나에 저장할 수 있습니다) 기본 페이지 클래스를 확인하십시오 (내 C#이 잘못된 경우 나는 일반적으로 죄송 VB.Net을 쓰기) 모든 페이지는 파일 뒤에 코드에서이 페이지에서 상속 : 사용자 정의 컨트롤에서 지금

public partial class _Default : PageToInheritFrom { 

} 

당신은 페이지의 유형이 무엇인지 알고

((PageToInheritFrom)this.Page).SpecialFunction(); 
,691를 호출 할 수 있습니다
관련 문제