jQuery Autocomplete and WebApi Sorting



我正在使用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
      }
   }));
},

最新更新