2011-02-25 2 views
0

asp.net과 chrome을 사용하고 있고 잠시 후 페이지가 응답하지 않습니다. 크롬 디버그를 살펴보면 메모리 사용량이 약 80MB까지 증가하고 크롬 팝업이 페이지를 죽이라는 요청을받는 것을 알 수 있습니다. 팝업이 오면 오류 카운터가 회전하여 약 30,000 개의 오류가 발생합니다. 이 오류를 유발하는 것은 updatepanel 호출입니다. 크롬에 표시된 오류는 "리소스를로드하지 못했습니다."입니다.페이지가 메모리 사용량을 80MB로 폭발시킨 다음 죽습니다.

업데이트 패널 : 사용자가 버튼을 클릭하고 패널이 새로 고쳐집니다. 페이지에는 업데이트 패널이 하나뿐입니다.

function HistoryUIActions() { 
    $('.SelectDay, .SelectDay1Digit').click(function() { GetNewDate(this); }); 
}; 


function GetNewDate(thedateitem) { 

    var TheDay = $.trim($(thedateitem).html()); 
    TheYear = 2011; 
    ThisMonth = 2; 

    DateString = ThisMonth + '/' + TheDay + '/' + TheYear; 

    __doPostBack('<%= TheUpdatePanel.ClientID %>', DateString); 
}; 


function EndRequestHandler(sender, args) { 
    HistoryUIActions(); 
}; 

모든 포스트 백에 오류 화합물 : 1,4, 11, 26, 57, 120, 247 .... 결국 크롬 페이지를 죽이고

이 내가 가진 것입니다. 함수에 중단 점을 넣으면 버튼을 누른 직후 코드가 중지됩니다. 그런 다음 __doPostBack 행에 도달하면 click 이벤트의 행으로 돌아가서 위에 표시된 횟수만큼 명백하게 실행하여 GetNewDate 함수를 다시 여러 번 시작합니다.

제안 사항?

+0

오류는 무엇입니까? 어떤 종류의 무한 루프가 어딘가에있는 것처럼 들리지만이 코드는 나에게 아무 것도 제안하지 않습니다. 다시 게시하는 중입니까? 그것은 하나 이상을 만들고 있습니까? (위 코드를 게시 한 이유가 무엇인지 추측하고 있습니까?) – Chris

+1

__doPostBack에서 .UniqueID를 사용하지 않아도됩니까? 나는이 코드가 모든 UpdatePanels을 새로 고침하게 만들 것이라고 생각한다. 어떻게 든 연쇄 반응을 일으킬 수있는 또 다른 것이 있을까요? –

+0

EvalMonthYear()는 무엇을합니까? – Paddy

답변

3

Duh. :)이 12 번을보고 난 후에, 나는 대답을 가지고 있다고 생각한다.

클릭 컨트롤이 업데이트 패널 외부에 있습니다. 그러나 새로 고칠 때마다 click 이벤트를 jQuery와 바인딩하는 "HistoryUIActions"를 호출합니다. 이렇게하면 클릭 할 때마다 컨트롤에 바인딩 된 클릭 이벤트 수가 두 배로 증가합니다.

클릭 핸들러는 누적됩니다. 컨트롤의 실제 DOM 요소가 다시 렌더링되지 않으면 다시 바인딩 할 필요가 없습니다. 클릭 할 때마다 중복 핸들러가 추가됩니다.

여러 번 새로 고침 문제를 해결해야하며 클릭 한 후에 제대로로드되지 않은 항목을 파악할 수 있습니다.

+0

감사! 네가 옳아; updatepanel에있는 이벤트 만 리 바인드합니다. 알아 둘만한! – frenchie

+0

잘 찾아 냈습니다. :) – Chris

관련 문제