我意识到这个问题已被多次询问(我全部都读了)但我仍然无法让我的工作。我正在使用jquery-ui自动完成功能,除了从文本输入中删除任何内容之外,一切看起来都完美无缺。
HTML:
<input type="text" id="CustSearchText" />
控制器:
[HttpGet]
public JsonResult Search_auto_complete(string search_name, string search_type)
{
if (search_name != null)
{
var db = new EDM_Customer();
var customerItems = from cI in db.customer
select cI;
if (search_type == "startsWith")
{
customerItems = customerItems.Where(cst => cst.cust_nm.Trim().ToLower().StartsWith(search_name.ToLower()));
}
else //contains
{
customerItems = customerItems.Where(cst => cst.cust_nm.Trim().ToLower().Contains(search_name.ToLower()));
}
var matches = (from c in customerItems
select new
{
cust_nm = c.cust_nm
}).Take(5).ToList();
return Json(matches, JsonRequestBehavior.AllowGet);
}
else
{
return null;
}
}
使用Javascript:
$("#CustSearchText").unbind().autocomplete({
source: function (request, search_type, response) {
search_type = $(".radio_label input[name=searchType]:checked").val();
$.ajax({
url: "/Customer/Search_auto_complete",
//type: "GET",
dataType: "json",
//contentType: "application/json",
data: { search_name: request.term, search_type: search_type },
success: function (data) {
response($.map(data, function (item) {
//alert(item.cust_nm);
return {
label: item.cust_nm
};
}));
},
error: function (response) {
alert("Err: " + response.responseText);
},
failure: function (response) {
alert("Failure: " + response.responseText);
}
});
},
select: function (e, i) {
$("#CustSearchText").val(i.item.Value);
},
minLength: 1
});
如果我在js中取消注释alert(item.cust_nm)
,它将一次显示所有匹配的记录。但是,从我的文本框中删除的内容永远不会出现。这就像回归不起作用。
任何有关错误的线索都将不胜感激。
答案 0 :(得分:1)
//...
response($.map(data, function (item) {
//alert(item.cust_nm);
return {
label: item.cust_nm
};
}));
//...
您尚未将response
定义为函数。也许有点明显,但那是错的。我认为你本可以放response[/*...*/]
。
我不确定它有什么问题。我只知道它出错了。也许你定义了一个函数response
?如果是这样,您需要更改变量名称或更改函数名称。