具有自动完成功能的json不会过滤数据

时间:2016-03-28 09:40:03

标签: jquery json asp.net-mvc autocomplete

我有这个简单的自动完成与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);
}

2 个答案:

答案 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);
}
  1. Jquery和前端代码保持不变。