jQuery自动完成和WebApi排序

时间:2012-10-06 21:02:02

标签: asp.net-mvc asp.net-web-api jquery-autocomplete

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

1 个答案:

答案 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
      }
   }));
},