今天在幫一個網頁加上AjaxControlToolKit的 CalendarExtender 時,很離奇的發生了如標題錯誤,完整的錯誤Message如下:
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
之前在使用AjaxControlToolKit,從沒遇過這奇怪的訊息。深怕是自己哪個小細節錯了,直接在VS2008 & VS2010 開了新專案測試,但怎麼測試都是可以正確執行,唯獨此專案會發生此錯誤,怎麼想都想不通。
查了很久,決定將頁面中所有In-line Tag <% %>相關的部分,一個一個註解掉,測試到底是什麼原因發生錯誤。
最後發現,原來是MasterPage中,Header部分,如下程式碼在作怪:
<script src="<%= ResolveUrl("~/Scripts/jquery-1.4.1.min.js") %>" type="text/javascript"></script>
將上方引用JQuery部分,修改為不使用ResolveUrl方式產生路徑,改直接固定寫死即可避免此錯誤了。
<script src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
會用上方寫法,是因為怕每個ContentPage的路徑各不相同,因此習慣在這種寫死路徑的地方,都在用ResolveUrl包起來,由Server自動產生正確路徑,避免抓不到,或參考不到的問題,很多如MasterPage用到的圖片...等,都會使用這樣的寫法。
結果經測試,只要MasterPage的Header中,含有<%= %>的In-line Tag,在有用到AjaxControlToolKit的ContentPage都會發生如標題之錯誤!而MasterPage的Body中,使用<%= %>的In-line Tag,則運作良好。
為什麼會有這樣的情況,其實還不太了解,想不通。但下次就必須注意MasterPage的Header中,要避免包含 In-line Tags了!!
PS. 我不太確定是否稱為In-line Tags,我指的In-line Tags,是指,<% %>、<%= %>、<%# %>、<%$ %>、<%# %> … 等標籤。 In-line Tags 可參考此篇文章,inline asp.net tags
沒有留言:
張貼留言