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

本文关键字:显示 错误 MVC NET jQuery UI ASP | 更新日期: 2023-09-27 18:15:08

我阅读了这个线程,研究了错误和应该起作用的示例。在那之后,我尝试在自己的基础上构建它,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>

视图中应具有自动完成功能的TextBox:

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

如果你需要更多的代码或信息,请告诉我,我会尽快提供。谢谢

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

您的控制器操作有错误的参数名称,应该是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始终为true。

如果你真的想坚持使用suggestion作为你的控制器参数,你需要在AJAX配置中明确定义它:

<script>
    $("#CustomerName").autocomplete({
        source: "/Customer/AutoCompleteCustomer",
        data: { suggestion: request.term },
        minLength: 3
    })
</script>
var data = (from Customers in db.Customers Where s.Name.ToLower().Contains(suggestion.ToLower()) select  new { id = Customers.CustomerID, value = Customers.CustomerName }).ToList().Take(20);

试试这个