Давайте попробуем это! Хорошо, сделай это:
Предположим, у вас есть список стран, которые вам нужно отфильтровать
Автозаполнение знает, как по умолчанию некоторые вещи по умолчанию, но предположим, что вы действительно хотели CountryName, а также вы знаете, что каждое нажатие клавиши делает ajax-вызов на указанный вами URL.
Создайте метод действия, например, так:
public ActionResult LookupCountry(string q, int limit)
{
var list = GetListOfCountries(q, 0, limit);
var data = from s in list select new {s.CountryName};
return Json(data);
}
Вот Jquery:
$(document).ready( function() {
$('#txtCountryName').autocomplete('<%=Url.Action("LookupCountry", "MyController") %>', {
dataType: 'json',
parse: function(data) {
var rows = new Array();
for(var i=0; i<data.length; i++){
rows[i] = { data:data[i], value:data[i].CountryName, result:data[i].CountryName};
}
return rows;
},
formatItem: function(row, i, n) {
return row.CountryName;
},
width: 300,
mustMatch: true,
});
});
Вот HTML
<html><head></head><body>@Html.TextBox("txtCountryName",Model.CountryName)</body></html>
В основном, магия в вызове LookUpCountry
GetCountriesList (строковый запрос, int startindex, int limit)
Возвращает MyCountries.Where(c => c.CountryName.SubString(startindex, limit).Contains(query)).ToList();
Итак, вы создаете свою собственную функцию обрезки, потому что JQuery не знает, что такое CountryName или как его обрезать. Как бы то ни было, если бы это был объект javascript, я не совсем уверен, но делаю
var jsonString = @Html.GetListOfCountries() //Or Model.Countries.ToJSONString()
var json = JSON.stringify(jsonString); //also JSON.Parse(jsonString) if stringify won't work
, который возвращает необходимые страны в качестве метода расширения Html Helper. И, возможно, в виде списка объектов javascript он будет достаточно умен, чтобы справиться с этим на родном языке. Однако первый подход работает для меня.