【问题标题】:json with autocomplete not filter data带有自动完成功能的 json 不过滤数据
【发布时间】:2016-07-15 13:16:42
【问题描述】:

我有这个带有 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);
}

【问题讨论】:

  • request.searchTerm 是如何填充的?被传递模型的值是否绑定在控制器中?
  • Bon Macalindong >>public ActionResult UsersReview(string searchTerm) { IEnumerable viewModel = from review in db.reviews.OrderBy(d => d.Created) .Include(s => s. subject) .Where(r => r.subject.SubjectName.Contains(searchTerm)).Distinct() 等等

标签: jquery json asp.net-mvc autocomplete


【解决方案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);
        }

【讨论】:

  • 不幸的是 .. 来自 db 的所有数据都被填充了
  • searchTerm 参数有值吗?我看不出 amrit sandhu 的代码有什么问题
【解决方案2】:

我建议使用存储过程。这样应用程序的性能更快,如果您需要更改过滤逻辑,您可以轻松完成,而不是更改代码并重新构建应用程序。

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 和前端代码保持不变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-15
    • 2014-02-02
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多