Ваш массив результатов от действия контроллера не в формате, который ожидает виджет. Автозаполнение ожидает массив строк (или массив объектов со свойствами value
и label
), а не объект с единственным свойством, значение которого является массивом строк.
Вы можете исправить это, обновив действие контроллера:
public ActionResult GetDistricts(string term)
{
var districts = _service.GetDistricts();
var districtNames = from c in districts select c.Name;
return Json(districtNames, JsonRequestBehavior.AllowGet);
}
Если вы пошли по этому маршруту, вы могли бы даже убрать много вашего $.ajax
кода и позволить автозаполнению позаботиться об этом:
district.autocomplete({
minLength: 2,
source: '@Url.Action("GetDistricts", "Address")'
});
<ч />
Или вы можете немного помассировать данные в обратном вызове $.ajax
success
:
district.autocomplete({
minLength: 2,
source: function (request, response) {
$.ajax({
type: "GET",
url: '@Url.Action("GetDistricts", "Address")',
dataType: "json",
success: function (data) {
response($.map(data.districtNames, function (item) {
return {
label: item.text,
value: item.text
}
}));
}
});
}
});
Примечание , что $.map
вызывается с data.districtNames
.