http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 11366|回复: 1

[Ajax] Ajax AutoCompleteExtender控件使用方法

[复制链接]
发表于 2013-3-9 17:31:22 | 显示全部楼层 |阅读模式
AutoCompleteExtender控件,固名思义就是可以辅助TextBox控件自动输入,实现如http://www.baidu.com这样的效果。
    Ajax Control Toolkit 是一个丰富的控件集,可以为我们提供许多很炫也很实用的页面功能。编写一个Asp.Net Ajax控件是比较耗费精力的,不仅需要有一定的javascript脚本编写能力,还需要了解微软的Ajax Library。如果我们急需一些效果,那么可以直接使用Ajax Control Toolkit 所提供的一些功能。但是如果想要完全明白它是如何运作的,还是需要认真地学习一下如何编写一个Asp.Net Ajax控件。我个人觉得Asp.Net Ajax控件能够较好地将以前的编写的javascript特效也融合到了.Net控件中,这样既利于javascipt代码的重用,更便于日后的使用,而不是一定要在控件中使用Ajax方式与服务端进行一次通信往来。
在Ajax Control Toolkit中包含了两类控件,其中一类后缀为Extender,也就是“扩展”的意思,这类控件可以对现有Asp.Net的能力进行扩充,来实现一些更华丽的效果。这篇文章简单介绍一下Ajax Control Toolkit中的AutoCompleteExtender如何使用,顾名思义,它可以实现一个常见的效果:AutoComplete(自动匹配)。
编写WCF Service代码
      在进行AutoComplete时,是将客户端文本框中输入的值与服务器端的数据相比较,这样就需要在服务端创建一个方法,它能够接受来自客户端文本框输入的字符串,并且针对此字符串对数据库或者其他数据源中的数据进行查找,然后将匹配的结果以字符串数组的形式返回给客户端,最后客户端将获得的结果以列表形式显示在输入文本框的下面。尽管前面的描述只有短短的几句话,但是却暗含了这样几个问题需要注意:
   1.由于每次客户端输入时都要进行一个查找和匹配的过程,因此要查找的数据源如果不大的话,应该尽量缓存在服务端内存中,而不是每次查找匹配都去访问实际的存储位置,比如说数据库。
   2.有可能用户输入的字符串会返回极大量的结果,比如30个,为了提升服务端查找的效率,也为了不在客户端显示极长的列表,可以限制返回的结果数目。
   3.AutoComplete是为了根据用户输入的字符判断用户的意图,然后返回可能的结果。如果用户只输入一个字符,比如a,就开始进行查找匹配,对于用户来说意义不大,而且也会加重服务端负担,因为此时往往会返回极长的列表。
AutoCompleteExtender控件的属性:
   1.TargetControlID:指定将被辅助完成自动输入的控件ID,这里的控件只能是TextBox;
   2.ServicePath:指出提供服务的WEB服务路径,若不指出则ServiceMethod表示本页面对应的方法名;
   3.ServiceMethod:指出提供服务的方法名;
   4.MinimumPrefixLength:指出开始提供提示服务时,TextBox控件应有的最小字符数,默认为3;
   5.CompletionSetCount:显示的条数,默认为10;
   6.EnableCaching:是否在客户端缓存数据,默认为true;
   7.CompletionInterval:从服务器读取数据的时间间隔,默认为1000,单位:毫秒。
 ASPX页面代码:
[code=html]    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" ID="ScriptManager1" />
        <ajaxToolkit:AutoCompleteExtender
            ID="AutoCompleteExtender1"
            runat="server"
            ServicePath="AutoComplete.asmx"
            TargetControlID="TextBox1"
            ServiceMethod="GetTextString">
        </ajaxToolkit:AutoCompleteExtender>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </form>   
</body>[/code]
WebServcie-AutoComplete.cs代码:
[code=csharp]using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;


[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.Web.Script.Services.ScriptService]

public class AutoComplete : System.Web.Services.WebService {

    public AutoComplete () {
    }

    [WebMethod]
    public string[] GetTextString(string prefixText, int count)
    {
        string[] strArray = new string[count];

        for (int i = 0; i < count; i++)
        {
            strArray = prefixText + i.ToString();
        }

        return strArray;
    }
}  [/code]
在这里需要注意以下几点:
   1.由于该WEB服务是为Ajax框架提供服务的,因此在类声明之前得加上属性声明:
     [System.Web.Script.Services.ScriptService]
   2.特别需要注意的是GetTextString这个方法。凡是为AutoCompleteExtender控件提供服务的方法都必需完全满足以下三个条件:
     A.方法的返回类型必需为:string [];
     B.方法的传入参数类型必需为:string  ,   int;
     C.两个传入参数名必需为:prefixText  ,  count。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-7-12 17:36:29 | 显示全部楼层
不错。值得学习啊,顶一个
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-6-14 10:09

© 2014-2021

快速回复 返回顶部 返回列表