ASP.NET MVC:jQuery UI Autocomplete错误地显示所有条目

时间:2016-10-27 10:13:00

标签: c# jquery asp.net asp.net-mvc jquery-ui

我读了这篇thread并研究了错误以及应该起作用的例子。之后我尝试在我自己的自动完成工作中构建它,但它总是显示所有条目,而不是仅显示与数据库中的搜索匹配的条目。

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

 #import "InboxTableViewCell.h"
@implementation InboxTableViewCell

- (void)awakeFromNib {
    [super awakeFromNib];

    // Initialization code


}

-(void)layoutSubviews{
    self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width/2;
    self.profileImageView.clipsToBounds=YES;
    [super layoutSubviews];
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

自动完成jQuery UI功能的代码:

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

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

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

如果您需要更多代码或信息,请告知我们,我会尽快提供。谢谢!

2 个答案:

答案 0 :(得分:2)

您的控制器操作的参数名称错误,应为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>

答案 1 :(得分:0)

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

试试这个