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

C# ASP.NET MVC:jQuery UI自动完成错误地显示所有条目,c#,jquery,asp.net,asp.net-mvc,jquery-ui,C#,Jquery,Asp.net,Asp.net Mvc,Jquery Ui,我读了这篇文章,研究了其中的错误和应该起作用的例子。之后,我尝试自己构建它,但它始终显示所有条目,而不是仅显示与数据库中的搜索匹配的条目 下面是返回自动完成函数数据的控制器代码: public JsonResult AutoCompleteCustomer(string suggestion) { var data = db.Customers.Where(s => suggestion == null || s.Name.ToLower().Con

我读了这篇文章,研究了其中的错误和应该起作用的例子。之后,我尝试自己构建它,但它始终显示所有条目,而不是仅显示与数据库中的搜索匹配的条目

下面是返回自动完成函数数据的控制器代码:

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>
如果您需要更多的代码或信息,请让我知道,我会尽快提供。谢谢

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);

尝试此操作

您的控制器操作的参数名称错误,它应该是
术语

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);
    }
因为此时它是不正确的,所以它总是空的,这就是为什么自动完成可以工作,但总是返回所有结果,因为这个标准
suggestion==NULL
总是正确的

如果您确实想坚持使用
建议
作为控制器参数,则需要在AJAX配置中明确定义:

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

$(“#客户名称”).autocomplete({
来源:“/Customer/AutoCompleteCustomer”,
数据:{建议:request.term},
最小长度:3
})

参数应该是
字符串术语
,而不是
字符串建议
。并从查询中删除
suggestion==null |
。我假设返回Json(daten,是一个输入错误(它的
数据
),一如既往,你抓住了我所有的错误,谢谢!你太棒了!:)是的,它是一个输入错误,数据是正确的。谢谢你的代码片段和解释,它显示了我的错误所在,我需要花更多的时间阅读文档以避免此类错误。。。投赞成票。
<script>
    $("#CustomerName").autocomplete({
        source: "/Customer/AutoCompleteCustomer",
        data: { suggestion: request.term },
        minLength: 3
    })
</script>