2010-11-21 1 views
1

Я пытаюсь использовать пользовательский интерфейс jQuery, но я не могу понять, как получить событие select для выполнения.Выберите событие на автозагрузке JQuery UI не запущено

Я связываю autocompleter следующим образом:

$().ready(function() { 
    $("#txtPersonSearch").autocomplete({ 
     source: '<%=Url.Action("GetPeople") %>', 
     minLength: 3, 
     select: function (event, ui) { 
      // This code is never reached 
      console.log(ui); 
     } 
    }); 
}); 

Я пропускаю что-то, чтобы иметь возможность связываться с выбора события?

ответ

2

Возможно, ваше действие контроллера вызывает исключение. Давайте рассмотрим следующие действия:

public ActionResult GetPeople(string term) 
{ 
    // the term parameter will contain the search string 
    // TODO: use the term parameter to filter the results from 
    // your repository. In this example the result is hardcoded 
    // to verify that the everything works. 
    return Json(new[] 
    { 
     new { id = "1", label = "label 1", value = "value 1" }, 
     new { id = "2", label = "label 2", value = "value 2" }, 
     new { id = "3", label = "label 3", value = "value 3" }, 
    }, JsonRequestBehavior.AllowGet); 
} 

вещей, чтобы следить за:

  • контроллера действия доступно с GET глаголом (JsonRequestBehavior.AllowGet)
  • Действие контроллера возвращает массив JSON, где каждый элемент имеет свойства идентификатора, метки и значения
  • Действие контроллера не генерирует исключения

И потом:

$(function() { 
    $('#txtMovieSearch').autocomplete({ 
     source: '<%= Url.Action("GetPeople") %>', 
     minLength: 3, 
     select: function (evt, ui) { 
      console.log(ui); 
     } 
    }); 
}); 

И, наконец, использовать FireBug проанализировать, что именно передается на сервер в качестве запроса AJAX и ответ от сервера.

+0

Вы были правы! Он работал с более простым возвратом JSON. Мой контроллер возвращает словарь , существует ли проблема с сериализацией его в JSON? – Dofs

+0

Посмотрите на мой пример. Не будет проблем с сериализацией словаря, но для плагина возникнут проблемы с пониманием ответа. Его нужно отформатировать, как в моем примере. Таким образом, использование простого метода расширений '.Select()' в вашем словаре позволит вам достичь желаемого результата: 'return Json (dico.Select (x => new {id = x.Key, label = x.Value, value = x.Value}), JsonRequestBehavior.AllowGet); ' –

+0

Большое спасибо за вашу помощь! – Dofs

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