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が名前で並べ替えられていることを確認しても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 に答える