2013-07-19 19 views
1

我們有一個.NET 4.0 WebForms應用程序。一頁有一個包含一些HtmlButton控件的UpdatePanel。當服務器在.NET 4.0上運行時,這是正常工作的。使用IE10標準模式在UpdatePanel中單擊HtmlButton導致雙XMLHttpRequest回發

當服務器升級到4.5時,我們注意到單擊按鈕會掛起瀏覽器。微調器會顯示,用戶的會話基本鎖定,直到通話超時。

在瀏覽器的開發者工具(F12)的網絡選項卡,我們觀察到:

  • IE10使用標準文件模式:兩個調用是對服務器進行。第一個沒有內容,結果是「(中止)」。提琴手報告內容長度不匹配。第二個電話在超時之前不會返回。
  • IE10兼容查看,文檔模式IE7標準:只對服務器進行一次呼叫。一切皆好。
  • IE10以任何其他模式(也包括IE9)將第一次中止和第二次掛起/待處理的服務器進行2次調用。
  • Chrome:兩次調用服務器,但第二次成功。

對運行.Net 4.0的服務器執行相同的觀察顯示類似的雙重調用,但在第二個調用沒有掛起。

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:Literal ID="myliteral" runat="server"></asp:Literal> 
     <button id="htmlbtn" runat="server" OnServerClick="htmlbtn_Click"></button> 
    </ContentTemplate>  
</asp:UpdatePanel> 

的ServerClick:

我用一個UpdatePanel中,文字和這樣的HtmlButton創建一個新的默認.NET 4.5 Web窗體應用程序重新此雙重調用行爲(除了掛起第二個呼叫)事件只是將當前時間放在文字中。

這重新創建了雙後行爲。我也嘗試使用其他類型的按鈕,如ImageButton,他們正常工作只發出一個單一的電話。

有人知道這裏發生了什麼嗎?有沒有什麼辦法可以避免使用HtmlButton的雙後?我假設這兩個電話與第二個電話掛斷有關,但這可能是一個錯誤的假設。

回答

0

事實證明,他們是一些jQuery綁定繼續爲每個部分頁面請求沒有被綁定,然後再次綁定。

在jQuery的$(document).ready()期間,我設置了對各種元素的綁定。此函數在UpdatePanels引起的部分回發期間被調用。因此,在某些情況下,我需要再次設置綁定之前執行的操作如下所示:$('#ctrl')。unbind(); (有可能是檢查是否存在綁定,只有在必要時添加它的方式。)

也有是在頁面上使用一個jQuery插件,自動調整大小的文本區域。初始化時,插件將用於計算文本高度的頁面添加一個克隆textarea。在每個部分頁面更新中,正在創建新的這些文本區域之一。使用Chrome的開發工具對於發現這個問題非常有用,因爲我可以看到DOM正在實時更改。我添加了一些腳本來檢查這些現有的文本區域並清理它們。

+0

我有完全相同的問題,如果你還記得,請你詳細解釋一下你的答案嗎? ......發生了什麼樣的jQuery綁定? –

+0

@ManuelNavarro我已經更新了答案,以提供更多信息。希望它有助於引導你朝着正確的方向前進。 –

相關問題