2009-05-29 12 views
0

は私がこのように書式設定していますいくつかのデータを持っている結果の書式データが

public ActionResult Find(string q) 
{ 
    var users = Customer.Search(q); 
    return Content(users); 
} 

とビューの私のjavascriptのは、次のようになります:

$(document).ready(function() { 
    $("input#user").autocomplete('<%= Url.Action("Find", "Customer") %>', { 
     minChars: 2, 
     width: 500, 
     matchContains: true, 
     autoFill: false, 
     formatItem: function(row, i, max) { 
      return i + "/" + max + ": (" + row[0] + ") " + row[1]; 
     }, 

     formatMatch: function(row, i, max) { 
      return row[0]; 
     }, 

     formatResult: function(row) { 
      return row[1]; 
     } 
     }); 
    }); 

質問

私はAutocomplete from hereを使用しています。この時点で、2つのフィールドを別々の値として読み取ることができないという問題が発生しています。たとえば、行名フィールドが "John"で電子メールフィールドが "[email protected]"の場合、それらは行[0]と行1にそれぞれ表示されます。しかし、現在、彼らは行[0]に "John、[email protected]"を、行1は未定義です。

適切なデータを表示するには、行(0)と行1を取得するために、何を変更する必要がありますか(javascriptまたは文字列を作成するメソッドのいずれか)私は名前の行のデータを持っていることを好むだろう

質問B

。これによって私は意味:私はこれが起こるように、私のデータをフォーマットするためにしばらくの間、苦労が、私は成功しなかった

formatItem: function(row, i, max) { 
    return i + "/" + max + ": (" + row.name + ") " + row.email; 

。オートコンプリートでこれを理解できるように、データをどのようにフォーマットするのですか?

答えて

2

名前と電子メールのプロパティでクラスの結果のリストを作成し、それをJSONとして返すと、それはあなたが望むように動作すると思います。

中級クラス

public class AutocompleteResult 
{ 
    public string Name { get; set; } 
    public string Email { get; set; } 
} 

検索コード:

var results = new List<AutocompleteResult>(); 
while (reader.Read()) 
{ 
    results.Add(new AutocompleteResult 
        { 
         Name = reader["name"], 
         Email = reader["email"] 
        }); 
} 
return results; 

処置:

public ActionResult Find(string q) 
{ 
    var users = Customer.Search(q); 
    return Json(users); 
} 

ビュー:

私は...主な違いは、解析方法だと思いますそしてその dataTypeの場合は、解析メソッドなどを調整する必要があります。 al。書式設定の権利を取得します。 formatResult/formatMatchを取り除くことができるかもしれませんが、わかりません。私はこれらを使用せず、私が解析していることを思い出して、値を適切に設定します。私はあなたの基本的なコードを維持しようとしていますが、私が言ったように、あなたがしている方法のすべてを使用せず、深く探究していません。

$(document).ready(function() { 
    $("input#user").autocomplete('<%= Url.Action("Find", "Customer") %>', { 
     dataType: 'json', 
     minChars: 2, 
     width: 500, 
     matchContains: true, 
     autoFill: false, 
     parse: function(data) { 
      var array = new Array(); 
      for (var i = 0; i < data.length; ++i) { 
       var datum = data[i]; 
       array[array.length] = { 
          data: datum, 
          value: datum.Name, 
          result: dataum.Email 
       }; 
      } 
     } 
     formatItem: function(data, i, max) { 
      return i + "/" + max + ": (" + data.Name + ") " + data.Email; 
     }, 
     formatMatch: function(data, i, max) { 
      return data.Name; 
     }, 
     formatResult: function(data) { 
      return data.Email; 
     } 
    }); 
}); 
+0

これは私が試みた多くの機能の1つでしたが、機能することができませんでした。この場合、javascriptがどのように動作するかを示す答えを更新することは可能でしょうか? –

+0

私の問題を示すために、上記のことをしてページを実行すると、結果は一列になります。 –

+0

javascriptで更新 - 解析メソッドを含む... – tvanfosson