【问题标题】:asp.net textbox autocomplete showing custom dataasp.net 文本框自动完成显示自定义数据
【发布时间】:2017-05-19 16:29:53
【问题描述】:

我正在使用 jquery 自动完成功能。以下代码我用来从数据库中获取数据。

public void ProcessRequest(HttpContext context)
{
    string prefixText = context.Request.QueryString("q");
    MySqlConnection conn = new MySqlConnection();
    conn.ConnectionString = ConfigurationManager.ConnectionStrings("conio").ConnectionString;
    MySqlCommand cmd = new MySqlCommand();
    cmd.CommandText = ("select cityCode,city,metro,status from cities where (cityCode like @SearchText)");
    cmd.Parameters.AddWithValue("@SearchText", "%" + prefixText + "%");
    cmd.Connection = conn;
    StringBuilder sb = new StringBuilder();
    conn.Open();
    MySqlDataReader sdr = cmd.ExecuteReader;
    while (sdr.Read) {
        sb.Append(sdr("cityCode")).Append(Environment.NewLine);
    }
    conn.Close();
    context.Response.Write(sb.ToString);
}

此代码有效,但我需要再添加一项功能。通过显示 cityCode 我还想显示相应的城市名称 f.g

PNQ(浦那)

这里 PNQ 是代码,PUNE 是城市名称,所以我希望在建议结果中显示这样。但是当用户选择任何值然后在文本框中它应该只得到代码而不是名称。谁能指导我如何做到这一点?

【问题讨论】:

    标签: c# jquery asp.net autocomplete


    【解决方案1】:

    没有内置的方法可以做到这一点。相反,您应该覆盖 select 事件,并自己更新输入值;

    //You need to pass data like following from code behind:
    [{
        "label": "PNQ(PUNE)",
        "value": "PNQ"
    }, {
        "label": "PNQ1(PUNE1)",
        "value": "PNQ1"
    }]
    
    
    
    [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string[] GetCustomers(string prefix)
        {
            List<string> customers = new List<string>();
            using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConfigurationManager
                        .ConnectionStrings["constr"].ConnectionString;
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.CommandText = "select ContactName, CustomerId from Customers where " +
                    "ContactName like @SearchText + '%'";
                    cmd.Parameters.AddWithValue("@SearchText", prefix);
                    cmd.Connection = conn;
                    conn.Open();
                    using (SqlDataReader sdr = cmd.ExecuteReader())
                    {
                        while (sdr.Read())
                        {
                            customers.Add(string.Format("{0}-{1}", sdr["ContactName"], sdr["CustomerId"]));
                        }
                    }
                    conn.Close();
                }
                return customers.ToArray();
            }
        }
    
    $("#autocomplete").autocomplete({
                    select: function (event, ui) {
                        //Instead of ui.item.label need to use ui.item.value
                        $(this).val(ui.item.value);
    
                    },
                    source: function (request, response) {
                        $.ajax({
                         url: '<%=ResolveUrl("~/page.aspx/GetCustomers") %>',
                         data: "{ 'prefix': '" + request.term + "'}",
                         dataType: "json",
                         type: "POST",
                         contentType: "application/json; charset=utf-8",
                         success: function (data) {
                             response($.map(data.d, function (item) {
                                return {
                                  label: item.split('-')[0],
                                  val: item.split('-')[1]
                                }
                             }))
                         },
                         error: function (response) {
                          alert(response.responseText);
                         },
                         failure: function (response) {
                           alert(response.responseText);
                         }
                       });
                    },
                    minLength: 1
    });
    

    【讨论】:

    • 你的意思是没有办法对后面的代码进行任何更改?
    • 我已经更新了答案。您需要从后面的代码中像键值一样传递数据。
    • 我需要在您的回答中进一步阐述。使用上面的脚本,我没有找到提到的代码隐藏文件的 url 在哪里。脚本如何从文件后面的代码中调用函数?
    • 我添加了示例 Web 方法代码和实现。你可以试试看。
    • 我尝试了代码。它在警报中显示页面 html 标记。
    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多