2009-05-29 2 views
0

У меня есть некоторые данные, которые я форматирование, как это:Форматирование данных для JQuery автозаполнения результаты

// ... imagine populating a SqlDataReader with some results ... 
var results = new StringBuilder(); 
while (reader.Read()) 
{ 
    results.AppendFormat("{0}, {1}\n", reader["name"], reader["emailAddress"]); 
} 
return results.ToString(); 

Мои действия контроллера довольно проста:

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. На этом этапе у меня возникает проблема, когда я не могу получить два поля для чтения в виде отдельных значений. Например, если поле имени строк - это «Джон» и его поле электронной почты «john[email protected]», я ожидаю, что они появятся в строке [0] и строке 1 соответственно. Однако в настоящее время я получаю «John, [email protected]» в строке [0], а строка 1 не определена.

Что нужно изменить (либо в javascript, либо в методе, где я строю строку), чтобы получить строку [0] и строку 1, чтобы показать правильные данные?

Вопрос B

Я предпочел бы, чтобы данные в строках имени. Под этим я подразумеваю:

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

Я долгое время пытался отформатировать свои данные, чтобы это произошло, но я никогда не был успешным. Как я буду форматировать свои данные, чтобы AutoComplete понял это?

ответ

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, вам, возможно, придется настроить метод разбора, et. и др. для правильного форматирования. Возможно, вы сможете избавиться от formatResult/formatMatch, но я не уверен. Я не использую их и, как я помню, что я делаю в parse, правильно устанавливает значения. Я пытаюсь сохранить ваш базовый код, но, как я уже сказал, я не использую все методы, которые вы делаете, и не исследовали их подробно.

$(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

Это была одна из многих вещей, которые я пробовал, но не смог функционировать. не могли бы вы обновить свой ответ, чтобы показать, как будет работать javascript в этом случае? –

+0

, чтобы продемонстрировать свою проблему, когда я делаю то, что у вас есть, и выполняю мою страницу, -все- результаты находятся в одной строке. –

+0

Обновлено с помощью javascript - включая метод анализа ... – tvanfosson

Смежные вопросы