У меня есть мульти-выборочный виджет kendo, который связан с большим количеством данных, чтобы справиться с этим, я виртуализировал виджет и поместил нагрузку на сервер.
Я пытаюсь выбрать некоторые исходные данные с помощью функции javascript, которая передает массив идентификаторов.Он работает хорошо только в том случае, если выбранные данные находятся в первом постраничном результирующем наборе виджета, если какой-либо из идентификаторов находится дальше, тогда они не выбраны, и мне нужно исправить это.
Вот код для моего виджета:
@(Html.Kendo().MultiSelect()
.Name("Cars")
.DataTextField("Name")
.DataValueField("Id")
.Placeholder("Select cars...")
.Filter(FilterType.Contains)
.DataSource(source => { source
.Custom()
.ServerFiltering(true)
.Events(e => e.Error("errorHandler"))
.ServerPaging(true)
.PageSize(80)
.Type("aspnetmvc-ajax")
.Transport(transport => {
transport.Read("GetData", "Positions");
})
.Schema(schema => { schema
.Data("Data")
.Total("Total")
.Errors("Errors");
});
}))
Данные получены из GetData
метода контроллера позиций, который привязан к моему репозиторию автомобилей.
GetData
public JsonResult GetData([DataSourceRequest] DataSourceRequest request)
{
var car = unitOfWork.CarRepository.Get().OrderBy(n => n.Name);
var results = vessel.ToDataSourceResult(request);
return Json(results);
}
Вот моя функция, которая запускается после пользовательского ввода (кнопка).Я добавил образец массива, чтобы показать вам, что передается.
InitialSelection
function initialSelection(filter) {
//filter is: "6544","4880","6545","6548"
var carSelection = $("#Cars").data("kendoMultiSelect");
var filterArray = filter.split(',').map(Number);
if (filterArray.length > 0) {
console.log(filterArray)
carSelection.value(filterArray);
} else {
carSelection.value();
}
}
Есть ли лучший способ сделать начальный выбор данных, чем чтоЯ делаю с вышеупомянутым JavaScript?Как я уже сказал, если идентификаторы не находятся на первой странице результатов, которые возвращаются, они не выбираются, что расстраивает.