2008-10-09 2 views
3

page_init, page preinit, load에 의심의 여지가 있습니다. 우리가 이것을 우리의 라이프 사이클의 여러 단계에서 호출 할 필요가있는 곳에서도 이것을 사용해야 할 때가 있습니다. 나에게 그들은 각각의 이벤트를 처리하는 방법을 알려주세요페이지 Preinit, Init, load

답변

4

페이지 이벤트는 사용자 컨트롤 이벤트 전에 먼저 일어난다. 페이지 PageInit 이벤트가 발생하면 모든 사용자가 PageInit 이벤트를 제어합니다. 페이지 PageLoad 이벤트가 발생하면 모든 사용자 컨트롤 PageLoad 이벤트가 시작됩니다. 등등 ...

때때로 개발자는 사용자 정의 컨트롤의 PageLoad 처리기에 개인 개체 초기화를 적용합니다.

그런 다음 페이지 PageLoad 핸들러가 초기화되지 않은 개인 오브젝트를 사용하는 사용자 제어 메소드를 호출하면 공통적 인 문제가 발생합니다. 사용자가 PageLoad 이벤트를 아직 제어하지 않았으므로 해당 객체는 여전히 "null"이고 예외는 throw (객체의 인스턴스로 설정되지 않음)입니다.

그런 다음 일반적으로 PageInit 처리기를 사용하여 사용자 정의 컨트롤 내의 내부 개체를 초기화합니다. 그 (것)들을 사용하는 공용 메소드가 호출 될 때 "null"이 아닙니다.

이 기술은 페이지 PageInit 처리기에서 사용자 정의 컨트롤 메서드를 호출하지 않는 경우에 적용됩니다. 내 의견으로는, 그러나, 당신은해서는 안됩니다. 그것은 페이지 코드에서 PageInit을 처리하는 것이 아닙니다. 사용자 제어 메소드 호출을 위해 페이지 PageLoad 핸들러를 사용하십시오.

+4

첫 문장은 틀린 것입니다. PageInit 이벤트 전에 시작된 컨트롤의 Init 이벤트입니다. 그러나이 답변은 수락대로 서명되었으므로 수정해야합니다. –

1

당신은 아마도 OnInit과 Load를 사용하고있을 것입니다. 차이점은 대부분 OnInit 이후에 발생하는 viewstate deserialisation 이벤트에 있기 때문에 OnInit의 컨트롤에서 값을 읽을 수 없습니다. 또한 OnInit에서 새 컨트롤을 페이지에 동적으로 추가 할 수 있습니다.
그리드 채우기 및 양식 필드 (텍스트 상자, 드롭 다운, ...)에서 읽는 것과 같은 다른 모든 작업은 Load 이벤트로 이동합니다.