我正在使用WebApi控制器将IDictionary返回到jQuery自动完成,如下所示:
public IDictionary<int, string> GetClientAuto(string term)
{
var clients = db.Clients.Where(n => n.Name.Contains(term)).OrderBy(n => n.Name);
return clients.ToDictionary(n => n.ClientID, n => n.Name);
}
问题是虽然我添加了断点并检查变量客户端按名称排序是否为真,但自动填充框中显示的顺序是不同的,可能是我期望的ID。我尝试将此添加到自动完成:sortResults:false,但没有效果。
我在我的成功函数中有这个,这里有什么东西我可能需要更改订单才能在标签上工作,即姓名:
success: function (json) {
// call autocomplete callback method with results
response($.map(json, function (name, val) {
return {
label: name,
value: val
}
}));
},
答案 0 :(得分:1)
它按ToDictionary调用排序,字典的顺序实际上没有定义(http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx),因为它应该没关系,但是我相信它通常是关键的价值,而不是价值。
你可以在javascript中使用它来命名,或者你可以从你的api返回字典以外的东西。 IEnumerable&gt;或IEnumerable可以解决问题。
交替查看字典上的OrderBy方法,但它们似乎都返回KeyValuePairs列表。
最终结果应该类似于
public IEnumerable<KeyValuePair<int, string>> GetClientAuto(string term)
{
return db.Clients.Where(n => n.Name.Contains(term)).OrderBy(n => n.Name).Select(n => new KeyValuePair<int, string>(n.ClientID, n.Name ));
}
success: function (json)
{
response($.map(json, function (item) {
return {
label: item.Value,
value: item.Key
}
}));
},