最近同事說他們有個ASP.NET 4.0 WebForm專案在預設的網站中執行 JavaScript 是OK的,
但是如果將它搬到另一個網站後,JavaScript 執行就會發生錯誤!
他查了一下發現發生錯誤的網站物件的Id前面多了 ctl00_
環境
ASP.NET 4.0 WebForm
Visual Studio 2010
問題
最近同事說他們有個 ASP.NET 4.0 WebForm 專案 在預設的網站中執行 JavaScript 是OK的,
但是如果將它搬到另一個網站後,JavaScript 執行就會發生錯誤!
他查了一下發現發生錯誤的網站物件的Id前面多了 ctl00_ 。
研究
ASP.NET 4.0 多了一個叫 clientIDMode 的東西,詳細可參考「Control.ClientIDMode 屬性」。
而ASP.NET 4.0 以前的版本 clientIDMode 都是使用 AutoID ,所以物件的 id 前面會多加入 ctl.._ 。
而ASP.NET 4.0 預設的 clientIDMode 是使用 Predictable。
所以看起來似乎是 clientIDMode 設定的問題。
結果檢查專案的 web.config 中並沒有設定。
那是那裡有問題呢???
就再往上一層找,結果發現可以work的系統中,在IIS的Root目錄中並沒有web.config,
而有問題的的系統,在IIS的Root目錄下,有一個web.config,裡面有設定 clientIDMode 為 AutoID ,
<pages clientIDMode="AutoID" />
因為專案中沒有設定 clientIDMode,所以就使用上層的設定,就使用 AutoID 。
所以就造成了 JavaScript 的錯誤。
解決方案
1.在專案的 web.config 中設定 clientIDMode 為 Predictable。
<system.web>
<pages clientIDMode="Predictable" />
<!-- ... 其他 設定 ... -->
</system.web>
2.將有問題的系統,Root目錄的web.config移除,以避免污染到本專案。
PS.除非該網站只有我們系統來使用,否則要評估是否會影響到別的系統哦!
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^