文章出處

  最近碰到一個很奇怪的問題!

  新發布一個ASP.NET的網站,基于.net 4.0 framework,基本沒有用到什么特別新的技術,但是由于給客戶預覽用的服務器比較老,操作系統用的是Windows 2003,上面默認只支持IIS 6。將網站發布上去之后大部分功能都能正常運行,但是有一些操作會莫名其妙地報'__doPostBack' is undefined的腳本錯誤。在網上查找了一下錯誤產生的原因,這個是.net 4.0 framework中的一個bug,可以查看這篇文章http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx

  部分ASP.NET的控件在postback的時候會失效,并且拋出'__doPostBack' is undefined的腳本錯誤,如DropDownList的SelectedIndexChanged事件觸發,RadioButtonList或CheckBoxList在postback的時候,還有LinkButton等控件。該問題只會出現在比較高版本的IE瀏覽器中(由于我本機只有IE11,所以不確定是否較低版本的IE上也會出現該問題),FireFox和Chrome上一切運行正常。另外,在IE中將User agent string改為IE10或以下也運行正常。

  嘗試了以下方法均無效:

  1. 重新安裝.net 4.0 framework。

  2. 在IIS中重新配置網站運行權限和.net設置項。

  3. 清除本機所有已安裝的.net framework版本然后重新安裝.net 4.0 framework。

  4. 排除網站代碼本身產生的問題。因為除了IE,其它的瀏覽器均運行正常,說明代碼本身沒有問題,應該是服務器環境所產生的。

  解決辦法:

  • 嘗試通過App_BrowsersUpdate來修補本網站的影響。在Visual Studio中可通過Nuget搜索并下載App_BrowsersUpdate,它會在網站根目錄創建App_BrowsersUpdate文件夾,并下載兩個browser文件。該方法只對本網站有效,并不能解決服務器上其它網站遇到的問題。如果該方法并不奏效,可嘗試打開本機的browsers文件并對其進行必要的修改,地址C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers。

  • 通過安裝hotfix來解決該問題(推薦)。安裝hotfix會影響服務器上所有已發布的網站。注意,如果安裝hotfix出錯或者無法安裝,可嘗試重新安裝對應版本的.net framework,然后再嘗試安裝hotfix。有的時候服務器上安裝的.net framework版本可能不是最新的或者沒有完全安裝相應的補丁(通常服務器上的Windows更新被強制關閉了導致補丁無法自動完成安裝)所以嘗試重新安裝.net framework然后再安裝hotfix一般會奏效。

  如果上述方法均不奏效,可以考慮升級IIS 6到IIS 7或IIS 8.5,或者升級.net framework到4.5或更新版本,或者為網站的所有頁面加上下面的腳本:

if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) {
  $('#YOUR_ASPNET_FORMID').prepend('<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />');
}

if (typeof __doPostBack == 'undefined') {
  __doPostBack = function (eventTarget, eventArgument) { object
    var theForm = document.forms['YOUR_ASPNET_FORMID'];
    if (!theForm) {
      theForm = document.YOUR_ASPNET_FORMID;
    }
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
      theForm.__EVENTTARGET.value = eventTarget;
      theForm.__EVENTARGUMENT.value = eventArgument;
      theForm.submit();
    }
  };
}

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()