如何使用文本框自动完成从选定的特定字段中获取ID值

本文关键字:字段 ID 获取 文本 何使用 | 更新日期: 2024-10-21 07:24:21

这是我用来获得自动完成的代码

在HTML视图中

<script>
    $(function () {
                $("#autoComp").autocomplete({
                    source: '@Url.Action("GetAutoComp")',
                    select: function (e, i) {
                        $("#autoComp").val(i.item.val);
                    },
                    minLength: 1
        });
    });
</script>

在行动GEAUTOCOMP我已经调用了一个网络服务

  public JsonResult GetAutoComp(string term)
        {
            ProcorreService.ProcorreWebService service = new ProcorreService.ProcorreWebService();
            string[] rst = service.Autocomplete(term);
           return Json(rst, JsonRequestBehavior.AllowGet);            
        }

在一个单独的服务器Web服务中,我写了以下代码来从数据库中检索数据

[WebMethod]
public List<string> Autocomplete(string autoName)
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["TESTDBConnectionString"].ConnectionString;
String query = @"Select CountryName,ID from Country where CountryName LIKE ''+@SearchFname+'%'";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@SearchFname", autoName);
List<string> list = new List<string>();
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
list.Add(string.Format("{0}-{1}", dr["COYNTRYNAME"], dr["ID"]));
}
return list;
}

这段代码运行良好,它将数据检索到HTML视图,但当选择列表时,它会返回国家名称,但我需要获得要返回的国家的ID

因此,为了获得国家的ID,我尝试了以下方法

  1. 我已尝试将列表转换为Json,如自动完成所需。

  2. 此外,我还尝试在jquery内部使用ajax从jquery中检索数据。

    $(document).ready(function () {
        $("#<%=txtSearch.ClientID %>").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: '<%=ResolveUrl("~/Service.asmx/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);
                    }
                });
            },
            select: function (e, i) {
                $("#<%=hfCustomerId.ClientID %>").val(i.item.val);
            },
            minLength: 1
        });
    });
    

在第二种情况下,它显示一个错误,例如请求的资源上不存在"Access Control Allow Origin"标头。因此,不允许Origin访问以解决此错误。我已尝试在服务器中添加以下标头,但它不能解决问题

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <!-- Enable Cross Domain AJAX calls -->
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
        <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
      </customHeaders>
    </httpProtocol>
   </system.webServer>

我已经尝试过通过多种方法获取Id,但无法获得任何帮助或如何获取Id的链接。提前感谢

如何使用文本框自动完成从选定的特定字段中获取ID值

在处理ajax调用返回的数据时,将val替换为value

return {
   label: item.split('-')[0],
   value: item.split('-')[1]
}

并修改选择如下

select: function (e, i) {
    $("#<%=hfCustomerId.ClientID %>").val(i.item.value);
}