网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Ajax
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Ajax跨域问题的一些解决方法.
.Google AJAX Language API开发者.
.网页数据的实时刷新.
.使用AJAX技术打造博客无刷新搜索.
.微软的Ajax库客户端Bug总结.
.ASP.NET AJAX中的非同步PageMeth.
.从两方面看AJAX与B/S.
.Ajax实现分页查询.
.利用PHP+JavaScript打造AJAX搜索.
.Ajax 框架ZK 2.2 发布.
.利用JQuery方便实现基于Ajax的数.
.一個Ajax.NET的查詢實例.
.利用Ajax传递Xml文档.
.ajax实现垮域访问初探.
.ASP.NET AJAX Beta2 调用本地Web.
.AJAX、AJAX实例及AJAX源代码(as.
.Ajax:拥抱JSON,让XML走开.
.迁移你的Web页面到ASP.NET AJAX .
.利用Asp.net Ajax异步获取xml文档.
.在ajax开发中集成数据库技术.

微软Asp.net Ajax 1.0的AutoComplete控件的几处修正和增强

发表日期:2007-5-27


  随Asp.net Ajax 1.0发布的AjaxControlToolkit系列控件给开发人员带来了很多便利,但其中很多控件似乎并没有我们想像的那么完美。最近对这里面的AutoComplete控件用得较多,发现了它的几个不足或错误之处:
  1.在某些情况下会出现“two components with the same id”的错误;
  2.容易导致在IE中出现“无法打开Internet站点,…,已终止操作”的问题;
  3.即使用户输入了很多的字符,即使已经没有相匹配的结果,它仍然会调用服务端方法,试图获取相匹配的值,白白增加了服务器的负担;
  4.自动完成列表的样式不太好看;
  5.服务端方法的签名必须是:string[] GetCompletionList(string prefixText, int count),无法从客户端取得其它需要的数据。这一点在一个页面中有多个需要从不同数据源获取数据的AutoComplete控件时尤其致命。

  要解决这些问题,首先需要知道怎样来修改相应的代码并使之在自己的应用中生效。值得庆幸的是,AjaxControlToolkit系列控件是开源的,所以我们可以根据自己的需要来尽情修改。用VS2005打开AjaxControlToolkit解决方案,打开AutoComplete文件夹中的AutoCompleteBehavior.js文件,修改并重新编译后,将生成的AjaxControlToolkit.dll文件更新到自己的项目引用中,即可应用我们优化和增强后的AutoComplete控件了。

  那么,具体需要修改哪些代码呢?
  针对第一个问题,需要在AjaxControlToolkit.AutoCompleteBehavior.callBaseMethod(this, 'dispose');这一行之前加上:


        if (this._popupBehavior) {
            this._popupBehavior.dispose();
            this._popupBehavior = null;
        }
  第二个问题,要将document.body.appendChild(this._completionListElement);这一行修改为            element.parentNode.appendChild(this._completionListElement);

  第三个问题,需要在_onTimerTick方法中,为if (text.trim().length < this._minimumPrefixLength) 这个判断增加一个条件,变成:if (text.trim().length < this._minimumPrefixLength || text.trim().length > 10) ,这就使得,当用户的输入超过10个字符时,就不必向服务端调用读取匹配值的方法了。

  第四个问题,要调整自动完成列表的样式,可以直接修改initializeCompletionList方法中的以下代码:


        completionListStyle.backgroundColor = this._textBackground;
        completionListStyle.color = this._textColor;
        completionListStyle.border = 'solid 1px buttonshadow';
        completionListStyle.cursor = 'default';
        completionListStyle.unselectable = 'unselectable';
        completionListStyle.overflow = 'hidden';

,或者删除这几行,并添加:element.className = "completionList";然后在页面上添加样式类“completionList”的定义即可;

  要解决最后一个问题,应该在 { prefixText : this._currentPrefix, count: this._completionSetCount}这一行中增加一个发给服务器的参数,变为:
  { prefixText : this._currentPrefix, count: this._completionSetCount , srcId: this.get_element().getAttribute("srcid") }
  从而,服务端的读取自动完成列表项的方法签名就可以写成:string[] GetCompletionList(string prefixText, int count ,string srcId)。这意味着,我们可以为需要应用自动完成功能的文本框预先设置一个用于标识其数据来源的标识字符串,C#代码如:tb.Attributes.Add("srcid", "xxx"); 然后,在GetCompletionList方法中就可以根据客户端传过来的这个参数值来有针对性地读取数据了。

上一篇:Ajax实现分页查询 人气:14878
下一篇:使用AjaxPro开发四级无刷新联动下拉框 人气:8241
浏览全部Ajax的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐