Jquery自动完成数据库

时间:2012-07-27 02:46:44

标签: c# jquery asp.net sql-server-2005

我似乎无法弄清楚自动填充搜索栏的代码有什么问题。

我唯一能想到的是我在URL

下引用了错误的东西

aspx Javascript

    $(document).ready(function() {
        SearchText();
    });
    function SearchText() {
        $(".ui-autocomplete").autocomplete({
            source: function(request, response) {
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "Admin_home.aspx/GetAutoCompleteData",
                    data: "{'Car':'" + document.getElementById('query').value + "'}",
                    dataType: "json",
                    success: function(data) {
                        response(data.d);
                    },
                    Error: function(results) {
                        alert("Error");
                    }
                });
            }
        });
    }

</script>`

aspx html代码

我似乎无法在这里输入或粘贴html。这只是一个 asp:Textbox ID =“query”class =“ui.autocomplete”

c#c​​ode

    [WebMethod]
    public static List<string> GetAutoCompleteData(string Car)
    {
        List<string> result = new List<string>();
        using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CarsConnectionString"].ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("select DISTINCT Car from T_Car where Car like '%'+ @SearchText +'%", con))
            {
                con.Open();
                cmd.Parameters.AddWithValue("@SearchText", Car);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    result.Add(dr["Car"].ToString());
                }
                return result;
            }
        }
    }

部分html是否需要包装在AJAX更新面板中?

另外,我正在使用sql server 2005中的搜索名称。

2 个答案:

答案 0 :(得分:2)

这不是jQuery自动完成的工作方式,

jQuery自动完成功能会自动将文本框中输入的文本发送到您在webmethod或类似处理程序中访问它的查询字符串“term”中指定的位置

         string input = HttpContext.Current.Request.QueryString["term"];

类似这样的事情

              [WebMethod]
public static List<string> GetAutoCompleteData(string Car)
{
    string input = HttpContext.Current.Request.QueryString["term"];
    List<string> result = new List<string>();
    using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CarsConnectionString"].ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand("select DISTINCT Car from T_Car where Car like '%'+ @SearchText +'%", con))
        {
            con.Open();
            cmd.Parameters.AddWithValue("@SearchText", input);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                result.Add(dr["Car"].ToString());
            }
            return result;
        }
    }
}

这可以在.aspx页面中找到

    $(".ui-autocomplete").autocomplete({
        source: "Admin_home.aspx/GetAutoCompleteData",
        select: function (event, ui) { }
      });

编辑:

我从来没有在web方法中实际执行此操作,我通常使用处理程序.ashx,但这应该同样有效。

当你完成所有更改后,然后在调试模式下运行网站,开始输入文本框并输入f12并观察导致的流量 - 如果输入“abc”,它应该看起来像

Admin_home.aspx / GetAutoCompleteData?术语= ABC

那么您可能需要稍微播放的响应,默认情况下.net会将“d:....”添加到客户端的响应中,但您可以观看并按顺序调整

另一个编辑:

         <asp:Textbox ID="query" class="ui.autocomplete">

不是你在jquery中放的东西

          $(".ui-autocomplete").autocomplete({

应该是

         <asp:Textbox ID="query" class="ui-autocomplete">

然而,另一个编辑:

缺少单引号

        using (SqlCommand cmd = new SqlCommand("select DISTINCT Car from T_Car where Car like '%'+ @SearchText +'%", con))

替换为

         using (SqlCommand cmd = new SqlCommand("select DISTINCT Car from T_Car where Car like '%'+ @SearchText +'%' ", con))

答案 1 :(得分:0)

尝试这可能会有所帮助

<script type="text/javascript">
    $(function() {
        $(".ui-autocomplete").autocomplete({
            source: function(request, response) {
                $.ajax({
                    url: "Admin_home.aspx/GetAutoCompleteData",
                    data: "{ 'Car': '" + request.term + "' }",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function(data) { return data; },
                    success: function(data) {
                        response($.map(data.d, function(item) {
                            return {
                                value: item
                            }
                        }))
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            },
            minLength: 2
        });
    });
    </script>