2011-02-25 31 views
0

我使用的是asp.net和chrome,並且頁面在一段時間後變得無響應。當我查看chrome調試時,我發現內存使用增加到大約80MB,並且chrome彈出一個請求來終止頁面。當彈出窗口出現時,錯誤計數器會旋轉併產生大約30,000個錯誤。觸發錯誤的是更新面板的調用。在chrome中顯示的錯誤是「無法加載資源」。頁面將內存使用量爆炸爲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行之後,它會再次啓動GetNewDate函數幾次,返回到click事件的行,顯然執行上面顯示的次數。

有什麼建議嗎?

+0

生成的錯誤是什麼?這聽起來像是某種無限循環在某處發生,但是這段代碼並沒有向我提出任何建議。它是否進行回發?它是不止一個?它只是當你點擊它,它變得沒有反應(我假設這就是爲什麼你發佈上述代碼?)... – Chris

+1

是不是應該在__doPostBack中使用.UniqueID?我認爲這段代碼會導致所有的UpdatePanel刷新。有可能是另一個可能導致連鎖反應? –

+0

EvalMonthYear()是做什麼的? – Paddy

回答

3

Duh。 :)看了十幾遍之後,我想我有答案,或者至少有一部分。

您的點擊控件不在updatepanel中。但是,每次刷新後,您都可以調用「HistoryUIActions」來將click事件與jQuery綁定。這會使您每次點擊它時綁定到控件的點擊事件的數量翻倍。

點擊處理程序是累積的。除非控件的實際DOM元素已被重新渲染,否則不需要重新綁定它。每次你點擊你添加一個重複的處理程序。

這應該解決多刷新問題,然後你可以找出什麼是不正確加載後點擊。

+0

謝謝!你是對的;你只能重新綁定更新面板中的事件。很高興知道! – frenchie

+0

斑點。 :) – Chris