AutoComplete是对文本框控件的扩展,当用户输入前面的字母时,以弹出区域的形式给出备选词条。就像我们在用百度搜索时可以在下方弹出近似搜索词组一样。

textBox控件,ToolkitScriptManager控件,autocompleteextender控件和示例数据库:本例中是TextFile.txt

前台代码:

    <body>  
        <form id="form1" runat="server">  
        <div>  
            <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">  
            </asp:ToolkitScriptManager>  
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>        
            <asp:autocompleteextender ID="TextBox1_autocompleteextender" runat="server"   
                TargetControlID="TextBox1" ServicePath ="~/AutoComplete.asmx" MinimumPrefixLength ="1"  
                UseContextKey="True" ServiceMethod="GetCompleteList">  
            </asp:autocompleteextender>  
        </div>  
        </form>  
    </body>  

注意:要设置MinimumPrefixLength,不然输再多的字母也弹不出备选词条。

本例中新建了一个WEB服务:AutoComplete.asmx。

在AutoComplete.asmx中写入下列代码:

    using System;  
    using System.Collections;  
    using System.Linq;  
    using System.Web;  
    using System.Web.Services;  
    using System.Web.Services.Protocols;  
    using System.Xml.Linq;  
    using System.IO;  
      
    /// <summary>  
    ///AutoComplete 的摘要说明  
    /// </summary>  
    [WebService(Namespace = "http://tempuri.org/")]  
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
    //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。   
     [System.Web.Script.Services.ScriptService]  
    public class AutoComplete : System.Web.Services.WebService {  
      
        public AutoComplete () {  
      
            //如果使用设计的组件,请取消注释以下行   
            //InitializeComponent();   
        }  
      
        [WebMethod]  
        public string HelloWorld() {  
            return "Hello World";  
        }  
       ///<summary>  
       ///获取数据的方法GetCompleteList  
       ///</summary>  
       //定义静态数组用于保存获取的数据  
        private static string[] autoCompleteWordList = null;  
        [WebMethod]  
        public string[] GetCompleteList(string prefixText,int count)  
        {  
            //将Text中的文件写入到temp数组  
            string[] temp = File.ReadAllLines(Server.MapPath("~/App_Data/TextFile.txt"));  
            //对Temp数组进行排序  
            Array.sort(temp,new CaseInsensitiveComparer());  
            autoCompleteWordList = temp;  
      
            //BinarySearch(Array,Object,IComparer)   
            //如果找到 value,则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array  
            //中的一个或多个元素,则为一个负数,该负数是大于 value 的第一个元素的索引的按位求补。  
            //如果找不到 value 且 value 大于 array 中的任何元素,则为一个负数,该负数是(最后一个元素的索引加 1)的按位求补  
            //可对负结果应用按位求补运算符 (~)以生成一个索引。  
            //如果此索引大于等于数组的大小,则数组中没有比 value 更大的元素。否则,即为大于 value 的第一个元素的索引。  
            int index = Array.BinarySearch(autoCompleteWordList,prefixText,new CaseInsensitiveComparer());  
      
            //indcx<0,即autoCompleteWordList中没有和输入相匹配的数  
              
            if (index < 0)  
            {  
                index = ~index;  
            }  
      
            //matchingCount;,匹配的行数。  
            int matchingCount;  
            for (matchingCount = 0; matchingCount < count && index + matchingCount < autoCompleteWordList.Length;matchingCount ++ )  
            {  
                //没有找到以prefixText为开始的字条刚停止  
                if(!autoCompleteWordList[index+matchingCount].StartsWith (prefixText,StringComparison .CurrentCultureIgnoreCase ))  
                {  
                    break ;  
                }  
            }  
      
            string [] returnValue=new string[matchingCount ];  
            //将匹配的字条复制到一个新的数组中  
            if(matchingCount >0)  
            {  
                Array .copy (autoCompleteWordList,index,returnValue,matchingCount );  
            }  
            return returnValue ;  
        }  
    }  

其中用到的几个方法:

1

Sort(Array,IComparer) 使用指定的 IComparer,对一维 Array 中的元素进行排序。

2

BinarySearch(Array,IComparer)

使用指定的 IComparer 接口,在整个一维排序 Array 中搜索值。

参数

array
类型:System ..::.Array

要搜索的已排序一维 Array。

value
类型:System ..::.Object

要搜索的对象。

comparer
类型:System.Collections ..::.IComparer

比较元素时要使用的 IComparer 实现。

- 或 -

若为 nullnothingnullptrnull 引用(在 Visual Basic 中为 nothing,则使用每个元素的 IComparable 实现。

返回值

类型:System..::.Int32

如果找到 value,则为指定 array 中的指定 value 的索引。如果找不到 valuevalue 小于 array 中的一个或多个元素,则为一个负数,该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 valuevalue 大于 array 中的任何元素,则为一个负数,该负数是(最后一个元素的索引加 1)的按位求补。

如果 Array 不包含指定值,则该方法会返回负整数。可对负结果应用按位求补运算符 (~)以生成一个索引。如果此索引大于等于数组的大小,则数组中没有比 value 更大的元素。否则,即为大于 value 的第一个元素的索引。

3

copy(Array,Int32,Array,Int32) 从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。长度和索引指定为 32 位整数。

参数

sourceArray
类型:System ..::.Array

Array,它包含要复制的数据。

sourceIndex
类型:System ..::.Int32

一个 32 位整数,它表示 sourceArray 中复制开始处的索引。

destinationArray
类型:System ..::.Array

Array,它接收数据。

destinationIndex
类型:System ..::.Int32

一个 32 位整数,它表示 destinationArray 中存储开始处的索引。

length
类型:System ..::.Int32

一个 32 位整数,它表示要复制的元素数目。

Ajax Control Toolkit:AutoComplete控件示例的更多相关文章

  1. html5使用canvas实现弹幕功能示例

    这篇文章主要介绍了html5使用canvas实现弹幕功能示例的相关资料,需要的朋友可以参考下

  2. 前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)

    这篇文章主要介绍了前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. H5 canvas实现贪吃蛇小游戏

    本篇文章主要介绍了H5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. ios – parse.com用于键,预期字符串的无效类型,但是得到了数组

    我尝试将我的数据保存到parse.com.我已经预先在parse.com上创建了一个名为’SomeClass’的类.它有一个名为’mySpecialColumn’的列,其数据类型为String.这是我尝试使用以下代码保存数据的代码:如果我运行这个我得到:错误:密钥mySpecialColumn的无效类型,预期字符串,但得到数组这就是我在parse.com上的核心外观:有谁知道我为什么会收到这个错误?

  5. ios – 上下文类型’NSFastEnumeration’不能与数组文字一起使用

    斯威夫特3,你会这样做吗?解决方法正如您所发现的,您不能使用as-casting将数组文字的类型指定为NSFastEnumeration.您需要找到一个符合NSFastEnumeration的正确类,在您的情况下它是NSArray.通常写这样的东西:

  6. ios – 如何在swift3中增加String.Index?

    在swift2.3中运算符用于string.index增加例如.一世我改为swift3代码发生了“一元运算符”不能应用于’@valueString.Index’类型的操作数(又名’@lvalueString.CharacterView.Index’)“在swift3中我改写了例如.i=1但是这段代码无法解决.请帮我.解决方法String.Index是String.CharacterView.Ind

  7. ios – CoreData有序关系 – 使用NSFetchRequest批量取消

    或者,是否存在批量不支持的API,它不是私有的?解决方法目前我有一个解决方案,但不是一个干净的解决方案:我希望按照有序关系中的20个小组进行批量修改.所以,每次我索引一个索引,它的索引除以20,我为接下来的20使用新的NSFetchRequest,并通过调用公共字段名称来解除它们.

  8. ios – 获取资产目录文件夹中所有图像的数组

    在iOS中,是否可以获取资产目录文件夹中的图像数组?我不确定为什么会对此进行投票.我真的不知道从哪里开始.我的另一种方法是创建文件夹中所有文件的plist,但它似乎是多余的.我无法添加任何代码,因为我会添加什么?

  9. ios – 来自调试器的消息:由于内存问题而终止

    我的应用程序使用Geojson文件.我使用MapBoxSDK将MGLpolyline添加到地图中.但问题是我的文件太大,以至于应用程序崩溃并收到错误:来自调试器的消息:由于内存问题而终止.我在第一次循环时面对66234个对象.我试图将数组块化为新数组,但没有成功.请帮我解决问题.这是我在地图上绘制的代码,这里是我的testprojectongithubuseXcode8.1如果有任何不同的第三方可

  10. ios – Swift – 使用字典数组从字典访问数据时出错

    我有一个非常简单的例子,说明我想做什么基本上,我有一个字典,其值包含[String:String]字典数组.我把数据填入其中,但当我去访问数据时,我收到此错误:Cannotsubscriptavalueoftype‘[([String:String])]?’withanindexoftype‘Int’请让我知道我做错了什么.解决方法您的常量数组是可选的.订阅字典总是返回一个可选项.你必须打开它.更

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部