Почему мои начальные значения меняются на виртуальном мультиселекте KendoUI? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть виджет с виртуальным выбором 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.Может кто-нибудь помочь мне понять, где это пошло не так и почему меняются идентификаторы?

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...