我似乎无法弄清楚自动填充搜索栏的代码有什么问题。
我唯一能想到的是我在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#code
[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中的搜索名称。
答案 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>