AjaxControlTookit中的AutoCompleteExtender位置错位问题 ListSearchExtender不支持中文的问题

今天在一个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,真是很麻烦啊

posted @ 2010-07-17 22:39  yan_xiaodi  阅读(...)  评论(...编辑  收藏