У меня есть виджет с виртуальным выбором KendoUI Multi-select, который передает начальные значения с использованием метода отображения значений, как описано на их веб-сайте.Проблема, которая у меня есть, заключается в том, что начальные значения меняются, когда они возвращаются виджетом.
Например, я передаю массив идентификаторов, которые я хотел бы изначально выбрать 265,4880,4545,2548
, как только значениеМетод mapper обработал этот идентификатор. Возвращаемые значения равны 264,2547,4544,4879
, что явно отличается от того, что я просил. Может ли кто-нибудь помочь мне определить, что идет не так в моем коде?
Вот мой код множественного выбора виджета
@(Html.Kendo().MultiSelect()
.Name("Cars")
.DataTextField("Name")
.DataValueField("Id")
.AutoBind(true)
.DataSource(source => {
source.Custom()
.ServerFiltering(true)
.ServerPaging(true)
.PageSize(100)
.Type("aspnetmvc-ajax")
.Transport(transport => {
transport.Read(read => read.Action("GetCars", "Cars"));
})
.Schema(schema => {
schema
.Data("Data")
.Total("Total")
.Errors("Errors");
});
}).Virtual(v => v.ValueMapper("valueMapper")))
Вот мои соответствующие функции JavaScript.
Первоначальный выбор
function initialSelection() {
//Triggered on page load
//For test purposes I've defined the array here as filter.
var filter = "265,4880,4545,2548"
var carSelection = $("#Cars").data("kendoMultiSelect");
var filterArray = filter.split(',').map(Number);
if (filterArray.length > 0) {
carSelection.value(filterArray);
} else {
carSelection.value();
}
}
Отображение значений
function valueMapper(options) {
$.ajax({
url: "@Url.Action("CarsValueMapper", "Cars")",
data: convertValues(options.value),
success: function (data) {
options.success(data);
}
});
}
Преобразование значений
function convertValues(value) {
var data = {};
value = $.isArray(value) ? value : [value];
for (var idx = 0; idx < value.length; idx++) {
data["values[" + idx + "]"] = value[idx];
}
console.log("Convert Values (data)");
console.log(data);
return data;
}
Следующие фрагменты кода взяты из моего контроллера.
Получить автомобили
public JsonResult GetCars([DataSourceRequest] DataSourceRequest request)
{
var car = unitOfWork.carRepository.Get();
return Json(car.ToDataSourceResult(request));
}
** Value Mapper **
public ActionResult CarsValueMapper(int[] values)
{
var indices = new List<int>();
if (values != null && values.Any())
{
var index = 0;
foreach (var car in GetAllCars())
{
if (values.Contains(car.Id))
{
indices.Add(index);
}
index += 1;
}
}
return Json(indices, JsonRequestBehavior.AllowGet);
}
Получить все автомобили
private static IEnumerable<Car> GetAllCars()
{
var cars = Enumerable.Range(1, 6000).Select(i => new Car
{
Id = i
});
return cars;
}
Я установил несколько точек останова, чтобы преследовать ошибку, и заметилчто поведение происходит при методе CarsValueMapper
.Может кто-нибудь помочь мне понять, где это пошло не так и почему меняются идентификаторы?
Большое спасибо