我正在使用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);
}
问题是,尽管我添加了一个断点并检查变量客户端是否按名称排序是否为 true,但自动完成框中显示的顺序不同,可能是我期望的 ID。 我尝试将其添加到自动完成:sortResults:false,但没有效果。
我的成功功能中有这个,这里有什么东西可能需要更改才能在标签上工作,即名称:
success: function (json) {
// call autocomplete callback method with results
response($.map(json, function (name, val) {
return {
label: name,
value: val
}
}));
},
它由 ToDictionary 调用排序,字典的顺序实际上并没有定义 (http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx),因为它无关紧要,但我相信它通常是键的值,而不是值。
你可以在javascript中按名称使用它,或者你可以从你的api返回字典以外的内容。 IEnumerable>或IEnumerable都可以解决问题。
交替查看字典上的 OrderBy 方法,但它们似乎都返回 KeyValuePair 列表。
最终结果应如下所示
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
}
}));
},