asp.net 实现 autocomplete [自动完成] ajax

asp.net 实现 autocomplete [自动完成] ajax

问题描述:当我们在textbox中输入字的时候,希望相关字下拉提示,供选择。

解决办法:使用jquery实现。

1、在.net中创建文件:Handler.ashx,代码如下:

<%@ WebHandler Language="C#" class="Handler" %>

 using System;
 using System.Web;// 添加两个命名空间
 using System.Collections.Generic;
 using System.Web.Script.Serialization;
using System.Data;
using System.Data.SqlClient;

namespace ZQY.Report.CollectInfo
{
    /// <summary>
    /// Handler 的摘要说明
    /// </summary>

    public class Handler : IHttpHandler
    {
        /// <summary>
        /// 根据关键字过滤内容
        /// /// </summary>
        /// <param name="keyword">关键字</param>
        /// /// <returns>过滤数组</returns>
        private string[] GetFilteredList(string keyword)
        {
            List<string> countryList = new List<string>();

            //此处选项一般从数据库中读取,然后循环添加给countrylist对象即可。

            DataSet ds = new DataSet();//创建数据集;
            SqlConnection conn = new SqlConnection(DBHelper.ConnectionString);
            try
            {
                string sql = " SELECT distinct [company_name] FROM [dbo].[dim_company]";
                SqlDataAdapter dr = new SqlDataAdapter(sql, conn);//上面两句可以合并成这一
                dr.Fill(ds); //填充数据集 

                for (int i = 0; i < ds.Tables[0].Rows.Count;i++ )
                { countryList.Add(ds.Tables[0].Rows[i]["company_name"].ToString()); }

            }
            catch (Exception ex)
            {
                //conn.Close();   关闭数据库连接
                if (conn.State == ConnectionState.Open) //判断数据库连接状态,是否连接
                {
                    conn.Close();
                }

            }
            //conn.Close();   关闭数据库连接
            if (conn.State == ConnectionState.Open) //判断数据库连接状态,是否连接
            {
                conn.Close();

            }

            List<string> filteredList = new List<string>();
            foreach (string sCountry in countryList)
            {
                // 判断是否包含关键字的国家,然后加入到过滤后的集合中。
                if (sCountry.Contains(keyword))
                {
                    filteredList.Add(sCountry);
                }
            }        // 返回数组,以便后面能序列化为JSON格式数据
            return filteredList.ToArray();
        }
        public void ProcessRequest(HttpContext context)
        {
            string keyword = context.Request.QueryString["keyword"];
            if (keyword != null)
            {
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                // 通过JavaScriptSerializer对象的Serialize序列化为["value1","value2",...]的字符串
                string jsonString = serializer.Serialize(GetFilteredList(keyword));
                context.Response.Write(jsonString); // 返回客户端json格式数据
            }
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

}

2、创建Default.aspx文件:代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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>无标题页</title>     <link type="text/css" rel="Stylesheet" href="js/jquery-ui-1.8.16.custom.css" />

    <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>

    <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>

<%-- 此处为juery调用脚本--%>

    <script type="text/javascript">              $(function () {                      $("#txtSearch").autocomplete({                            minLength: 1, // 设置搜索的关键字最小长度// 设置自动完成列表的函数,函数包括两个参数,requset和response
                           source: function (request, response) {
                 $.ajax({                                   type: "POST",          // 通过request.term可以获得文本框内容
                                url: "Handler.ashx?keyword=" + request.term,                                    contentType: "application/json; charset=gb2312",                                      dataType: "json",                                          success: function (data) {                                 // jQuery.map(array, callback) :将一个数组中的元素转换到另一个数组中。                                 //  下面就是把数组["value1", "value2",...]转换为[{value:"value1"}, {value:"value2"},...]
                                 response($.map(data, function (item) {
                                         return { value: item };
                                }));                                  },                                  error: function () {
                                    alert("ajax请求失败");
                                     }
                                      });
                                      }
                                      });
                                       });           </script>

</head> <body>     <form id="form1" runat="server">     <div align="center">         <fieldset style="width: 400px; height: 100px;">             <table border="0"  cellpadding="3" cellspacing="3">                 <tr>                     <td>                         <asp:Label ID="lblCountry" runat="server">国家:</asp:Label>                     </td>                     <td>                         <asp:TextBox ID="txtSearch" runat="server" Width="150px"></asp:TextBox>                     </td>                 </tr>             </table>         </fieldset>     </div>     </form> </body> </html>

3、实现效果如上图所示:

总结:使用jquery时,需首先下载如下包:jquery-ui-1.8.16.custom.zip(下载地址:http://jqueryui.com/download

内部包含如下三个文件:jquery-ui-1.8.16.custom.css       jquery-1.6.2.min.js     jquery-ui-1.8.16.custom.min.js

如果是汉字:需要在配置文件中加入如下:    <globalization requestEncoding="gb2312" responseEncoding="gb2312" />

否则可能产生乱码!

时间: 2024-10-08 15:43:28

asp.net 实现 autocomplete [自动完成] ajax的相关文章

jquery autocomplete 自动补全

写在前面 autocomplete是jqueryUI里的一个插件 效果和说明可以访问这里,作用类似于搜索时的自动提示: 相信用过jQuery autocomplete 自动补全功能同学有不少,但是往往我们所对应的需求不同,有的仅仅是为了省事,敲两个字就有一堆可供选择的信息可供选择,但并不是所有需求都是这样的,我们还有这样的需求,敲两个字,将这个文字对应的实体绑定出来. 主要的参数 jQuery UI Autocomplete常用的参数有: Source:用于指定数据来源,类型为String.Ar

jquery.autocomplete自动补齐和自定义格式

1.简单的下拉自动补齐,可以使用本地或远程数据源 <input name="autoTag" id="autoTag" /> var source = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"]; $('#autoTag').au

ASP.NET MVC WebGrid &ndash; Performing true AJAX pagination and sorting 【转】

ASP.NET MVC WebGrid – Performing true AJAX pagination and sorting FEBRUARY 27, 2012 14 COMMENTS WebGrid is a very powerful HTML helper component introduced with ASP.NET MVC 3 and ASP.NET Web Pages. Despite all its cool features, it is troublesome to

一种全新的自动调用ajax方法

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>Examples</title> <meta name="description" conte

Rendering a simple ASP.NET MVC PartialView using JQuery Ajax Post call

http://stackoverflow.com/questions/15466597/rendering-a-simple-asp-net-mvc-partialview-using-jquery-ajax-post-call Rendering a simple ASP.NET MVC PartialView using JQuery Ajax Post call,布布扣,bubuko.com

ASP.NET中关于XML的AJAX的读取与删除

一个XML文件,名称就暂定为GroupStudents.xml吧,内容如下: <?xml version="1.0" encoding="utf-8"?> <GroupStutents> <GroupStutent value="个人资料"> <Item> <ID>0011-0220-302</ID> <Name>名称01</Name> <Sta

jquery.autocomplete 自动补全 应用

下拉自动补全的js控件还是很多的,不过好多都被集成在N多组件之一了,像Jquery.easyui,jquery.chonsen等等都可以实现类似的功能.但我想要的是是一款简单轻巧,应用于整个系统的js. 于是我选择了jquery.autocomplete.js,基本参数注解参考:http://www.cnblogs.com/EWall/archive/2011/04/28/2031613.html,JS及相关CSS可在google code下载,链接https://code.google.com

asp.net给文件分配自动编号,如【20140710-1】

在开发办公软件的时候,需要给很多文件什么的东西分配一个编号,是按照日期来的,比如2014.07.10的第一个文件编号就为20140710-1,这一天的第二个文件编号就为20140710-2,以此类推...... 我在最近的编程开发中也遇到了类似的问题,经常好几次的修改,终于出来一下方法,较之修改前,这中方法的编号紊乱率大大降低,因为不可能在一个相同时间(精确到秒,甚至更小),两个人同时操作. 不扯这些了,我这个只是自己弄出来的一个方法,也希望大家能找到更好的方法,能完全解决两个人同时操作的问题,

asp.net中ScriptManager自带Ajax与jQuery事件冲突

问题引诉:最近在使用asp.net自带的无刷新提交ScriptManager时,发现一个问题,就是和我自己用jQuery写的一些事件函数和局部刷新相冲突.通过在网上收索,发现很多人都遇到这个同样的问题.最终还是找到的解决的办法,在此我想将其解决的办法分享出来供大家参考. 问题解决办法: 方法1.两者实现都能够实现页面的无刷新效果,所以可以保留其中的一种即可: 方法2.如果必须要两者混合应用,那么在用jQuery绑定事件是就要注意一些了 我们平时在jQuery中绑定事件最常用的方式有以下三种:以c