我有这个简单的自动完成与json结果,但它不断从我的数据库表中获取所有数据而不是根据输入到搜索框的搜索条件的数据
的jQuery
$(document).ready(function () {
$("#searchTerm").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("FindSubjectsName", "Profile")',
//data: "{'searchTerm': '" + request.searchTerm + "' }",
data: { searchTerm: request.searchTerm },
dataType: 'json',
type: "GET",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
response($.map(data, function (item) {
return {
label: item.value,
value: item.value,
id: item.id,
}
}))
}
});
},
minLength: 2,
});
});
C#
public JsonResult FindSubjectsName(string searchTerm)
{
var results = db.subjects.Where(s => searchTerm == null ||
s.SubjectName.ToLower().Contains(searchTerm.ToLower())).Select(x => new
{ id = x.SubjectId, value = x.SubjectName }).Distinct().ToList();
return Json(results, JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:1)
试试这个
public JsonResult FindSubjectsName(string searchTerm)
{
var results = db.subjects.Where(s => s.SubjectName.ToLower().Contains(searchTerm.ToLower())).
Select(x => new { id = x.SubjectId, value = x.SubjectName }).Distinct().ToList();
return Json(results, JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:1)
我建议使用存储过程。这样,应用程序的性能更快,如果您需要更改过滤逻辑,您可以轻松地执行此操作,而不是更改代码并重新构建应用程序。
1创建存储过程
CREATE PROCEDURE GetSubjects
@SearchText VARCHAR
AS
BEGIN
Select * from Subjects Where SubjectName LIKE '%' + @SearchText + '%'
END
GO
2更新您的实体数据模型。右键单击并选择“从数据库更新模型”。这将自动将您刚刚创建的存储过程添加到DataContext。
public JsonResult FindSubjectsName(string searchTerm)
{
<YOURDATACONTEXT> db = new <YOURDATACONTEXT>();
var result = db.GetSubjects(searchTerm);
return Json(result, JsonRequestBehavior.AllowGet);
}