上次介紹過如何修改web.config在現有的ASP.NET專案上啟用MS AJAX[註: MS AJAX官方網站上有對各Config Section的詳細說明],我已經用同樣的方法成功升級過好幾個專案,不過今天被電了一下。有個專案無論我怎麼調web.config,MS AJAX就是不生效! 即使Button在Update Panel中,Click也會觸發PostBack。

查了好久,總算找出原因: 由ASP.NET 1.1升級的專案,web.config中會有<xhtmlConformance mode="Legacy"/>的設定,目的在讓ASP.NET 1.1時代建立的非XHTML格式網頁能正常顯示。但它卻會影響MS AJAX的正常運作,用Fiddler比對的結果,加入xhtmlConformance 設定後,原本在網頁HTML中應該要載入三個JS,只會剩一個,而這些JS就是處理Validation、Postback等邏輯的Client Script,少了AJAX功能就會失常!

<script src="/img/loading.svg" data-src="/MiniAjaxLab/WebResource.axd?d=txk52LiGXXTyXT-eNSvsSQ2&amp;t=633076449793593750" type="text/javascript"></script>
<script src="/img/loading.svg" data-src="/MiniAjaxLab/ScriptResource.axd?d=opollxqh..略...p_Ag1&amp;t=633076458731093750" type="text/javascript"></script>
<script src="/img/loading.svg" data-src="/MiniAjaxLab/ScriptResource.axd?d=opollxqh...略...9ffhog0&amp;t=633076458731093750" type="text/javascript"></script>

順道補充一點,熟悉ASP.NET 1.1的人會發現以前放在aspnet_client\system_web\1_1_4322下的webuivalidation.js等檔案,在ASP.NET 2.0中已經找不到了! ASP.NET 2.0導入了webresource.axd的觀念,JS、圖檔可以Embedded進DLL中,再透過WebResource.axd?d=SbXSD3uTnhYsKUOZ6IXYG8QCXW86UizF0&t=632768953157700078的URL動態由DLL中取出傳回Client端,如此,就不必為了額外部署Client端程式而困擾囉! 這招在開發自訂控件(Custom Control)時,十分好用!


Comments

Be the first to post a comment

Post a comment