我读了这篇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>
如果您需要更多代码或信息,请告知我们,我会尽快提供。谢谢!
答案 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);
试试这个