ASP.NET MVC: jQuery UI 自动完成错误地显示所有条目

发布时间: 2017/1/23 22:00:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我读此线程,研究的错误和应该工作的例子。后,我试图建立在我自己的 autcomplete 的作品,但它始终显示所有的条目,而不是只有那与在数据库中搜索匹配的条目。

所以这里是我的自动完成功能为返回数据的控制器代码︰

public JsonResult AutoCompleteCustomer(string suggestion)
        {
            var data = db.Customers.Where(s => suggestion == null || s.Name.ToLower().Contains(suggestion.ToLower())).Select(x => new { id = x.CustomerID, value = x.CustomerName }).Take(20).ToList();

            return Json(data, JsonRequestBehavior.AllowGet);
        }

我的自动完成 jQuery UI 功能的代码︰

<script>
    $("#CustomerName").autocomplete({
        source: "/Customer/AutoCompleteCustomer",
        minLength: 3
    })
</script>

在视图中应具有自动完成文本框中︰

@Html.TextBoxFor(m => m.CustomerName)

如果你需要更多的代码或信息,请让我知道,我会尽快提供。谢谢你 !

解决方法 1:

你的控制器操作有错误的参数,它的名字,应该是 term :

public JsonResult AutoCompleteCustomer(string term)
    {
        var data = db.Customers.Where(s => term== null || s.Name.ToLower().Contains(term.ToLower())).Select(x => new { id = x.CustomerID, value = x.CustomerName }).Take(20).ToList();

        return Json(data, JsonRequestBehavior.AllowGet);
    }

因为它是不正确的那一刻它将始终为 NULL 这就是为什么您自动完成是工作,但总是返回所有结果作为本标准 suggestion == null 是总是如此。

如果你真的想要坚持使用 suggestion 作为您的控制器参数,您需要显式地定义这在 AJAX 配置︰

<script>
    $("#CustomerName").autocomplete({
        source: "/Customer/AutoCompleteCustomer",
        data: { suggestion: request.term },
        minLength: 3
    })
</script>
赞助商