我有一个虚拟的KendoUI多选小部件,该部件使用其网站上记录的值映射器方法传递初始值。我的问题是小部件返回初始值时会发生变化。
例如,我传递了一个我最初希望选择265,4880,4545,2548
的ID数组,一旦值映射器方法处理了此ID,返回值就是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));
}
**值映射器**
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
方法中。谁能帮助我了解问题出在哪里以及为什么要更改ID?
非常感谢