Однажды у меня это работало, но я не уверен, что это сейчас ломает. Объекты и свойства объектов не отображаются в раскрывающемся списке. Я могу получить свойства объекта, которые будут отображаться, если я передам только массив строк одного из свойств в моем контроллере автозаполнения, но я хотел бы передать все объекты в раскрывающийся список автозаполнения и оттуда стилизовать шаблон. Я менял DataTextField и Template, чтобы упростить этот пример и цели тестирования, но пока не добился успеха. Также теперь я возвращаю массив объектов из моего метода Parts_Read и убедился, что AllowGet включен. Вы замечаете, что мне не хватает?
Вид
@(Html.Kendo().AutoComplete()
.Name("parts_results")
.DataTextField("Name")
.Template("#= VendorPartCode # | #= Name # | #= UpcCode #")
.HeaderTemplate("<div class=\"dropdown-header k-widget k-header\">" +
"<span>Matching Parts</span>" +
"</div>")
.FooterTemplate("Total <strong>#: instance.dataSource.total() #</strong> items found")
.Filter("contains")
.MinLength(3)
.HtmlAttributes(new { style = "width:100%", @class = "form-control"})
.Height(520)
.DataSource(source =>
{
source.Read(read =>
{
read.Action("Parts_Read", "AutoComplete")
.Data("onAdditionalData");
})
.ServerFiltering(true);
})
)
Сценарий
function onAdditionalData() {
return {
text: $("#parts_results").val(),
supplier: $("#part_supplier").val()
};
}
Контроллер автозаполнения
public JsonResult Parts_Read(string text)
{
int supplier = int.Parse(Request.Params["supplier"]);
var search = Request.Params["text"];
if (!string.IsNullOrEmpty(text) && supplier >0)
{
dbContext db = new dbContext();
var data = db.dbParts.Where(x => x.PartSupplierCompanyId == supplier && (x.PartName.ToLower().Contains(search.ToLower()) || x.PartCode.ToLower().Contains(search.ToLower()))).Select(p => new TimsPart(p,p.Company)).ToArray();
return Json ( data, JsonRequestBehavior.AllowGet );
}
else
{
return new JsonResult { Data = new List<TimsPart>(), JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
}
О, да, на самом деле есть соответствующая ошибка JS. Циклическая ссылка при сериализации. Скрыто из-за ошибок ссылки на изображение. Спасибо за внимание. Должен быть в состоянии взять это отсюда.
Ваш код выглядит хорошо.
Parts_Read
действительно возвращает данные? Что будет отображаться при вводе не менее 3 символов? Есть ли ошибки JS в консоли браузера? Есть ли разница, если убрать строкуTemplate
из управления?