Этот код возвращает только автозаполнение из одного столбца, и моя логика состоит в том, чтобы получить его из двух столбцов. Я хочу знать, в чем проблема. Пожалуйста, если кто-нибудь знает ответ, пожалуйста, помогите мне.
Благодарю!
public JsonResult SearchFromTable(string name)
{
AccountingDataLayer.AccountingSMSEntities context = new AccountingDataLayer.AccountingSMSEntities();
var search = (from s in context.Products
where s.Name == name || s.FullCode == name
select new{s.FullCode , s.Name , s.Description });
return Json(search, JsonRequestBehavior.AllowGet);
}
public JsonResult AutoCompleteProductName(string term , string t)
{
AccountingDataLayer.AccountingSMSEntities context = new AccountingDataLayer.AccountingSMSEntities();
var result = (from p in context.Products
where p.Name.ToLower().Contains(term.ToLower()) || p.FullCode.ToLower().Contains(t.ToLower())
select new { p.Name , p.FullCode }).Distinct();
return Json(result, JsonRequestBehavior.AllowGet);
}
$("#search").autocomplete({
source: function (request, response) {
$.ajax({
url: "/InVoiceStock/AutoCompleteProductName",
type: "POST",
dataType: "json",
data: { term: request.term , t: request.t },
success: function (data) {
response($.map(data, function (item , t) {
return { label: item.Name, value: item.Name, label: t.FullCode, value: t.FullCode };
}))
}
})
},
messages: {
noResults: "", results: ""
}
});
});'
Вы без необходимости создали целый набор переменных t
. Объект запроса будет иметь только одно свойство term
, которое ссылается на значение, которое в настоящее время присутствует в текстовом вводе. Таким образом, request.t
не будет указан здесь
data: { term: request.term , t: request.t }
Двигаясь вперед, в методе действий string t
будет пустой и не будет использоваться при фильтрации
var result = (from p in context.Products
where p.Name.ToLower().Contains(term.ToLower()) || p.FullCode.ToLower().Contains(t.ToLower())
select new { p.Name , p.FullCode }).Distinct();
Чтобы исправить это, в term
use where в обоих условиях удалите ненужные ссылки на t