컨트롤 b의 모든 이벤트를로드하지 말고 컨트롤 b의 메서드를 호출하면됩니다. 그런 다음 이벤트를 추가하여 페이지가 소비하는 것을 제어하고, 이벤트가 발생하면 컨트롤의 load 메소드를 호출합니다. b.
편집 : 좋아
에 SampleCode
예를 들면 있도록하는 ASPX 페이지
- 만들
- 배 사용자가 영문 페이지에 모두 사용자 컨트롤을 넣어
제어합니다.
<cc:control1 runat="server" id="control_one" />
<cc:control2 runat="server" id="control_two" />
그럼
컨트롤 1에서 대리자와 이벤트를 생성한다.
public delegate void MyCustomEvent (EventArgs args);
public event MyCustomEvent MyEvent;
protected void Page_Load(object sender, EventArgs e)
{
MyEvent(e);
}
페이지로드시 이벤트가 발생했습니다. 따라서 필요한 경우, 완료되면 MyEvent 이벤트를 호출하여 로직을 생성 할 수 있습니다.
페이지에서 해당 이벤트에 대한 처리기를 추가하려는 경우 호출 할 때 함께 처리 할 수 있습니다.
protected override void OnInit(EventArgs e)
{
control_one.MyEvent += new WebUserControl1.MyCustomEvent(control_one_MyEvent);
base.OnInit(e);
}
void control_one_MyEvent(EventArgs args)
{
control_two.MyCustomLoad();
}
그래서 페이지가 초기화 될 때 이벤트 처리기를 추가합니다. 이벤트 처리기에서 물건을로드하려면 두 번째 컨트롤에서 사용자 지정 메서드를 호출합니다. ,
public void MyCustomLoad()
{
//Stuff only loaded when event is raised and calls this method.
}
그래서이 뭔가를로드 제어 1을 수있는 페이지가, 그것은 뭔가를 컨트롤이 말할 수 끝났어 알고 때이 끝났다 말 :
그런 다음 두 번째 컨트롤에 내가있다.
편집 :이 문제를 친구와 논의한 후 주문 제어를 설명하겠다.
페이지 수명주기 이벤트의 순서를 제어 할 수 없습니다. 즉, 컨트롤 A를 가질 수 없으며 모든 페이지 라이프 사이클 이벤트를 실행 한 다음 완료되면 컨트롤 B가 페이지 라이프 사이클 이벤트를 모두 실행하도록하십시오.
페이지 수명주기를 없애고, 위 예제에서와 같이 컨트롤을 렌더링하는 순서를 제어하는 방법을 만들 수 있습니다. 제어 A가 끝날 때 특정 지점에서 이벤트를 발생시킴으로써 제어 B에게 무엇인가를 지시 할 수 있습니다.
두 컨트롤 사이의 중간은 컨트롤 A에서 발생하는 이벤트를 처리하는 페이지로, 컨트롤 B의 메서드를 호출합니다. (잘 해킹 할 수 있습니다.)은 컨트롤 A를 구체적으로 말할 수 없습니다. 컨트롤 B는 나쁜 두 컨트롤간에 직접적인 종속성을 만들기 때문에 무언가를 할 수 있습니다. 것 (
컨트롤 B를로드하기 전에 컨트롤 A를로드해야하는 이유는 무엇입니까? UserControls는 중첩 컨트롤이나 복합 컨트롤이 아니면 다른 UserControls와 상호 작용하도록 디자인되어서는 안됩니다. 당신은 당신의 디자인을 더 설명 할 수 있습니까? –