2013-04-09 7 views
1

ASP UpdatePanels의 jQuery 위젯은 Ajax 요청 후 다시 초기화해야하지만 일반적으로 UpdatePanel 내부의 HTML을 대체하기 전에 언 바운드되지 않습니다. . .html ("...") 또는 .remove()를 호출 할 때마다 jQuery가이 문제를 처리하지만 UpdatePanel은 jQuery를 사용하지 않습니다.ASP에서 이벤트 바인딩 해제 UpdatePanel Ajax 이전에 메모리 누수 방지 요청

사용자가 외부에서 클릭 할 때 숨길 필요가있는 팝업 요소가 있기 때문에 Ajax 요청 후에 Teardown 함수가 호출되지 않을 때이를 감지하는 jQuery 특별 이벤트를 만들었습니다. . 따라서 시간이 지남에 따라 더 이상 문서에 첨부되지 않은 요소에 대한 이벤트 처리기가 점점 더 많아지고 있습니다.

내 모든 위젯 초기화 기능 (모든 Ajax 요청 후 실행 됨)을 사용할 수 있으며, 분리 된 요소를 확인하고 이벤트를 바인딩 해제 할 수 있지만 다른 문제가 발생할 수 있습니다.

답변

0

팝업이 표시 될 때 "clickout"이벤트를 바인딩하고 팝업이 숨겨져있을 때 바인딩 해제하는 간단한 해결책이있는 것처럼 보입니다. 이것은 여전히 ​​하나의 이벤트가 ajax 요청으로 인해 언 바운드되지 않을 가능성을 남겨 두지 만 용인 할 수 있습니다.

1

내 이전의 대답과 함께 문제를 해결하지만, 코드 프로젝트에이 문서는 유사한 문제를 가진 다른 사람의 도움이 될 수 있습니다 http://www.codeproject.com/Articles/34348/jQuery-Memory-Leak-in-UpdatePanel

첫째는 ASP 아약스 pageload에 후에 실행됩니다 Sys.Application.add_load를 사용하여 제안을 요청은 메모리 누수를 해결하지 못합니다.

둘째, 자바 스크립트 클로저를 통해 이벤트를 바인딩하는 방법에주의하십시오. 그러나 이것은 UpdatePanel 특정 문제를 완전히 해결하지 못할 수도 있습니다.

셋째, ASP가 ajax 요청으로 HTML을 삭제할 때 실행되는 HTML 요소에 dispose 함수를 추가 할 수 있습니다. dispose 함수는 이벤트 핸들러를 바인딩 해제하여 요소에 대한 다른 참조를 제거해야합니다. 이것은 ASP UpdatePanel 메모리 누수 관의 마지막 못이어야합니다.