wangchao.org
添加收藏 | 博客
 
购物视频论坛IT业界自然风光美女图片王朝网络小游戏BT下载生活百科编程设计手机图铃小说
 
笑话 | 水库 | 娱乐 | 体育 | 英语 | 宠物 | 美食 | 旅游 | 养生 | 手机 | 数码 | 汽车 | 珠宝 | 美容 | 装修 | 厨房 | 科普 | 动物 | 植物 | 影音 | 百科 | 知道 | 词典
  
 
 您好! 您现在位于: 王朝网络 → 编程设计 → 《微软Asp.net Ajax 1.0的AutoComplete控件的几处修正和增强返回上一页 
 
1楼 

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

  网上购物、在线购物、购物搜索 欢迎光临本站购买图书、影视、音乐、数码、百货,手机等商品。

  随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方法中就可以根据客户端传过来的这个参数值来有针对性地读取数据了。

  随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  Asp  AutoComplete  net  修正  几处  增强  微软  控件  
 
您可以将本页贴到其他网站
UBB代码HTML代码
 
 
 
 
 
 
 更多内容
 ·绑定Enum到ASP.NET数据绑定控件的 ·妙用Photoshop差值模式绘制逼真音 ·Photoshop调色:让美女皮肤更红润 ·在Vista工具条上添加Google Gadg
 ·让火狐看上去更像一个Vista应用程 ·Excel 2007中撤消、恢复或重复操 ·无线网络安全 保卫在空气中传播的 ·把被盗QQ里丢失的QQ好友们全找回
 ·Photoshop简单美化视频照片(男孩 ·用Photoshop把照片处理成剪纸 ·Word自定义工具栏因Acrobat丢失的 ·隐藏Windows Vista系统开始菜单中
 ·如何让网络坚不可摧 交换机安全六 ·学习如何辨别Microsoft邮件安全性 ·用QQ传送文件、资料的三种有效途 ·纹理技巧:Photoshop打造干涸血渍
 ·巧用Dreamweaver轻松制作网页页内 ·mysql全文搜索索引的字段提高搜索 ·详细的jsp分页(oracle+jsp+apac ·ASP开发中存储过程应用全接触
 ·种种证据显示 Windows XP SP3存在 ·一招把病毒木马全部拒之门外 ·用Photoshop通道混合器修复破损的 ·在Windows Vista中轻松实现宽带自
 
 
最新评论  点此查看所有评论
 
 
 
 
发表评论(支持UBB码)


验证码:  
 
 
 
© 2005- 王朝网络 版权所有