07年的时候写过一篇有关自动完成(Atuocomplete)的文章 asp.net Ajax ---AutoComplete控件使用 ,那篇文章中使用的是Asp.net Ajax ControlTollKit中的一个控件,虽然那时对里面几十个控件都研究过,不过遗憾的是在实际开发中确从未用到过,鉴于现在Ajaxpro的易用性和普遍性,本文将使用ajaxpro来实现自动完成的功能。

使用Ajaxpro之前,还是来重温下使用Ajaxpro的四个必备条件。

1 添加对Ajaxpro的引用。

2 配置webconfig的httpHandlers 节点,代码如下:

<add verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>

3 在PageLoad中注册类 ,代码如下

AjaxPro.Utility.RegisterTypeForAjax(typeof(Autocomplete2.AjaxproDemo));

4 后台被调用的方法上要写上[AjaxPro.AjaxMethod()] 标记

本示例将采用Ajaxpro根据文本框中输入的关键字从后台取出结果返回到客户端,由于是演示后台使用List作为数据源,数据是用程序添加的,在正式使用时可以换成在数据库中取值的方式。代码如下:

前台代码:

  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxproDemo.aspx.cs"   Inherits="Autocomplete2.AjaxproDemo" %>    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "  http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    <html xmlns="http://www.w3.org/1999/xhtml" >  <head runat="server">      <title>Ajaxpro-Autocomplete</title>      <style type="text/css">      #divText     {         display:none;         position:absolute;          z-index:100;          width:252px;          height:200px;          border:1px solid #6EBDD0;           background-color:#EEF4F7;     }          #txtKeyword     {         width:250px;          border:1px solid #6EBDD0;       }     </style>          <script type="text/javascript">          function displayDiv(id,mode) {             var divText = document.getElementById("divText");             if (mode) {                 divText.style.display = "inline";             } else {                 divText.style.display = "none";             }         }                  function getText(obj) {             var keyword = obj.value;             var x = obj.offsetLeft;             var y = obj.offsetTop;             while (obj = obj.offsetParent) {                 x += obj.offsetLeft;                 y += obj.offsetTop;             }              if (keyword != "") {                 var result = Autocomplete2.AjaxproDemo.GetText(keyword).value;                 var divText = document.getElementById("divText");                 if (result != "" && result!=null) {                     //divText.style.display = "inline";                     displayDiv("divText",true);                     divText.style.top = (parseInt(y,10) + 21) + "px";                     divText.style.left = x + "px";                     divText.innerHTML = result;                 }                 else {                     displayDiv("divText",false);                 }             }         }                  function setText(obj) {             displayDiv("divText",false);             document.getElementById("txtKeyword").value = obj.innerHTML;          }         function setColor(obj) {             obj.style.backgroundColor = "#D0E4E9";         }         function clearColor(obj) {             obj.style.backgroundColor = ""         }     </script> </head> <body>     <form id="form1" runat="server">     <input id="txtKeyword" type="text" onkeyup="getText(this)" />          <!---->     <div id="divText" runat="server" >              </div>     <!---->     </form> </body> </html> 

后台代码:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;//new usingusing System.Data.Linq.sqlClient;using AjaxPro;using System.Text;namespace Autocomplete2{    /// <summary>    /// Ajaxpro-Autocomplete    /// </summary>    public partial class AjaxproDemo : System.Web.UI.Page    {        protected void Page_Load(object sender,EventArgs e)        {            AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxproDemo));        }        /// <summary>        ///根据关键字匹配和关键字相符的结果返回        /// </summary>        /// <param name="keyWord">关键字</param>        /// <returns></returns>        [AjaxPro.AjaxMethod()]        public string GetText(string keyWord)        {            List<Content> list = new List<Content>();            list.Add(new Content("asp.net mvc"));            list.Add(new Content("asp.net ajax"));            list.Add(new Content("asp.net 教程"));            list.Add(new Content("asp.net 视频教程"));            list.Add(new Content("asp.net 源码"));            list.Add(new Content("asp.net cms"));            list.Add(new Content("asp.net 3.5"));            list.Add(new Content("c# 数组"));            list.Add(new Content("c# 多线程"));            list.Add(new Content("oec2003"));            list.Add(new Content("oec2004"));            list.Add(new Content("oec2005"));            list.Add(new Content("oec2006"));            var q = list.Where(p => p.Title.StartsWith(keyWord)).Take(10);            StringBuilder sb = new StringBuilder();            try            {                if (q.Count() > 0)                {                    foreach (var t in q.ToList<Content>())                    {                        sb.Append("<div onclick=\"setText(this)\"" +                           "onmouSEOver=\"setColor(this)\" " +                           "onmouSEOut=\"clearColor(this)\" " +                           "style=\"cursor:pointer;width:100%\">" +                            t.Title + "</div>");                    }                }                return sb.ToString();            }            catch            {                return "";            }        }    }    public class Content    {        public string Title { get; set; }        public Content(string title)        {            Title = title;        }    }}

运行结果如下图:

注:Ajax.netAjaxpro.dllAjax.dll两个版本,这两个版本在使用时有些区别。

1 webconfig的配置不一样

Ajaxpro.dll的webconfig配置如下:

<add verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>

Ajax.dll的webconfig配置如下 :

<add verb="Post,Get"path="ajax/*.ashx" type="Ajax.AjaxHandlerFactory,Ajax"/>

2 在客户端调用后台方法时有区别

Ajax.dll在调用时直接写类名.方法名就可以,如下

var result = AjaxproDemo.GetText(keyword).value;

Ajaxpro.dll在调用时要加上命名空间,如下:

var result = Autocomplete2.AjaxproDemo.GetText(keyword).value;

示例下载

AjaxPro版自动完成Autocomplete功能实现的更多相关文章

  1. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  2. Swift 字符串替换/过滤/切割/拼接

    替换为/结果过滤过滤掉单个字符/结果过滤掉开头和结尾的空白结果切割对字符串使用/作为分隔符来切割,不允许空字符串使用split函数结果是一个数组对字符串使用/作为分隔符来切割,允许空字符串结果拼接结果

  3. Swift开发教程--字符串的操作

    替换把?替换为/结果

  4. swift 网络搜索热词排行

    1.使用www.showapi.com上的接口,需要注册添加一个App,这样才能获取appid和secret密钥,调用前需要订购套餐(选免费的就可以了);2.外部库Podfile文件内容,SnapKit这里暂时不需要用到:3.桥接头文件参考:http://www.jb51.cc/article/p-pcleyxep-te.html4.AppTransportSecurityhasblockedac

  5. 如何在Swift中打乱数组?

    如何随机化或混洗Swift中的数组中的元素?例如,如果我的数组包括52张扑克牌,我想洗牌,以便洗牌。这个答案详细说明了如何在Swift的各种版本中添加Fisher-Yatesshuffle。Swift3版本是最宽松的,但是它们至少可以用于数组。每个Swift版本的命名和行为与该版本的mutating和nonmutating排序方法相匹配。

  6. unit-testing – 如何在Swift中对NSFetchedResultsController进行单元测试

    我有一个Swift应用程序,它使用NSFetchedResultsController从持久存储中获取List对象:它的工作方式与预期的一样,我将List对象描述打印到控制台.我想为我的应用程序编写一些单元测试,所以我创建了扩展XCTestCase的类.代码编译没有问题,测试运行,但不幸的是我无法在该上下文中获取List对象.我在控制台中获得的所有内容都是List对象的数量和致命错误:线路上升:我

  7. swift – 检查自定义对象数组是否包含特定的自定义对象

    说我有一个非常简单的Person类我希望将一个这样的人的集合存储在一个属性中,该属性是一个Person类的数组,类型为Person也许我实现如下问题:我如何检查people.list是否包含实例alex,好吗?

  8. swift – 使用反射来设置对象属性,而不使用setValue forKey

    在Swift中,不可能使用.setValue(…)>可空类型字段,如Int?>具有枚举类型的属性>一个可空对象的数组,如[MyObject?]这有一个解决方法,也就是通过覆盖对象本身中的UnVersionKey方法的setValue.因为我正在写一个基于反射的通用对象映射器.请参阅EVReflection我想尽量减少这种手动映射.是否有其他方式自动设置这些属性?

  9. Swift Sliceable上的递归

    事实证明,有一个通用的解决方案.您需要添加这些通用要求:对于发布的问题,这给出了:这是任何切片上有用的通用缩减:我不能相信这一点,Apple开发论坛上的解决方案是posted.令人遗憾的是,通用要求如此涉及到这样一个基本操作–它几乎不直观!

  10. uitableview – 使用Swift的“使用未解析的标识符”

    我正在重写我在Swift中的一个应用程序,它显示SouthKohala的实时天气数据.爱Swift到目前为止!

随机推荐

  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找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部