1

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

问题是虽然我添加了一个断点并检查变量 clients 是否按 Name 排序变为 true,但自动完成框中显示的顺序不同,可能我希望通过 ID。我尝试将此添加到自动完成:sortResults:false,但没有效果。

我在我的 succes 函数中有这个,这里是否有一些东西可能我需要更改才能在标签上工作的顺序,即名称:

success: function (json) {
                        // call autocomplete callback method with results
                        response($.map(json, function (name, val) {
                            return {
                                label: name,
                                value: val
                            }
                        }));
                    },
4

1 回答 1

1

它由 ToDictionary 调用排序,实际上并没有定义字典的顺序(http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx),因为它不重要,但我相信它是通常是键的值,而不是值。

您可以在 javascript 中按名称使用它,或者您可以从您的 api 返回字典以外的内容。IEnumerable> 或 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
      }
   }));
},
于 2012-10-06T21:45:23.703 回答