今天在一個2.0的項目裡用AutoCompleteExtender,開始的時候沒發現什麼錯誤,後來麻煩接踵而至。無論如何調試,AutoCompleteExtender自動完成的列表都和文字框對不起來,位置錯位,比如文字框在上面,自動完成列表跑到下面去了,如:
在一個頁面中使用多個AutoCompleteExtender時更是亂七八糟。為了搞清楚到底是什麼原因,開始逐一排查。把設定的css刪掉,還是錯位。然後建立了一個test頁面,copy同樣的代碼進去,沒想到竟然是正常的!這是為什麼呢?
然後又把頁面刪除,重新添加控制項,一個一個的加,但就算只加一個AutoCompleteExtender,也是錯位的。這就奇怪了。
後來終於想到了,因為是後台管理的介面,在測試的時候,正式的頁面是在架構裡面,而test那個頁面是直接啟動並執行。把正式頁面在新視窗中開啟,這下終於正常了。
看來AutoCompleteExtender控制項與架構頁有衝突。目前還沒找到解決辦法,實在不行,只能開啟個新視窗編輯了。
浪費了一晚上的時間!tmd
目前發現ListSearchExtender控制項也會出現這種問題,提示會位置錯亂,估計也是對架構頁支援不好。
ps:對於ListSearchExtender不支援中文的問題,網上搜的一篇文章:
http://www.cnblogs.com/hhq80/archive/2008/03/19/1113048.html
使用ListSearchExtender時,發現輸入中文沒有顯示,分析了一上ListSearchBehavior.js,發現_isNormalChar函數上有一個e.charCode>6000,而漢字的編碼範圍是19968~40869,這個函數把如果是漢字,就返回false,即不提示顯示,將代碼改這如下即可正常顯示漢字了:
_isNormalChar : function(e) {
/// <summary>
/// Returns true if the specified charCode is a key rather than a normal (displayable) character
/// </summary>
/// <param name="e" type="Sys.UI.DomEvent">
/// Event info
/// </param>
/// <returns type="Boolean" />
// Walking through Sys.UI.Keys won't work -- Ampersand is code 38 which matches
if (Sys.Browser.agent == Sys.Browser.Firefox && e.rawEvent.keyCode) {
return false;
}
if (Sys.Browser.agent == Sys.Browser.Opera && e.rawEvent.which == 0) {
return false;
}
//if (e.charCode && (e.charCode < Sys.UI.Key.space || e.charCode > 6000)) {//修改前的
if (e.charCode && (e.charCode < Sys.UI.Key.space)) {//修改後的
return false;
}
return true;
},
這個需要重新把原始碼編譯一下。很久之前應該做過,記在這裡備忘。
網上的空間很少有能支援到.net3.5之上的,大部分還是2.0,真是很麻煩啊