關於我

我的相片
用心思考、保持熱情,把工作上的經驗作分享與紀錄。希望能夠跟大家一起不斷的成長~

control contains code blocks (i.e. <% ... %>).

今天在幫一個網頁加上AjaxControlToolKit的 CalendarExtender 時,很離奇的發生了如標題錯誤,完整的錯誤Message如下:
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). 
1
之前在使用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

沒有留言:

張貼留言