为什么我的KendoUI ValueMapper返回错误的ID?

时间:2019-05-15 11:00:03

标签: model-view-controller kendo-ui

我正在尝试在Web应用程序中结合使用KendoUI MVC DropDownList和虚拟化功能。 As per the documentation我试图添加一个ValueMapper,以便服务器在执行诸如编辑网格中的行之类的任务时可以找到专门选择的项目。

我遇到的问题是,当valueMapper函数运行时,它将返回一个随机ID,该ID并非最初传递的ID,这意味着它选择了错误的项目,我不确定我做错了什么

这是我的下拉列表的代码:

@(Html.Kendo().DropDownList()
.Name("VesselId")
.OptionLabel("Please select")
.DataTextField("Name")
.DataValueField("VesselId")
.MinLength(3)
.Filter(FilterType.Contains)
.DataSource(source =>
{
    source.Custom()
    .ServerFiltering(true)
    .ServerPaging(true)
    .PageSize(80)
    .Type("aspnetmvc-ajax")
    .Transport(transport =>
    {
        transport.Read("ReadVessels", "Report");
    })
    .Schema(schema =>
    {
        schema
        .Data("Data")
        .Total("Total")
        .Errors("Errors");
    });
})
.Virtual(v => v
.ItemHeight(30)
.ValueMapper("valueMapper")
))

我的报表控制器中的ReadVessels方法如下:

public ActionResult VesselsValueMapper(int[] values)
{
    var indices = new List<int>();

    if (values != null && values.Any())
    {
        var index = 0;

        foreach (var vessel in GetMapperVessels())
        {
            if (values.Contains(vessel.VesselId))
            {
                indices.Add(index);
            }
            index += 1;
        }
    }
    return Json(indices, JsonRequestBehavior.AllowGet);
}

GetMapperVessels方法:

private static IEnumerable<Vessel> GetMapperVessels()
{
    var data = new UnitOfWork();            
    var vessels = data.VesselRepository.Get();
    return vessels;
}

最后,这是将所有内容绑定在一起的javascript函数。

function valueMapper(options) {
        $.ajax({
            url: "@Url.Action("VesselsValueMapper", "Report")",
            data: convertValues(options.value),
            success: function (data) {
                console.log("Value Mapper Success")
                options.success(data);
                console.log(data);
            }
        });
    }

        function convertValues(value) {
            var data = {};

            value = $.isArray(value) ? value : [value];

            for (var idx = 0; idx < value.length; idx++) {
                data["values[" + idx + "]"] = value[idx];
            }

            return data;
        }

问题是,如果传入的值是27222,则输出是诸如6571之类的随机值。我在控制器中放置了一些断点,并注意到在VesselsValueMapper方法期间

foreach (var vessel in GetMapperVessels())
{
    if (values.Contains(vessel.VesselId))
    {
        indices.Add(index);
    }
    index += 1;
}

具体来说,if (values.Contains(vessel.VesselId))部分是vessel.VesselId不是最初传递的ID,我认为这就是抛出它的原因。选择错误的原因可能是我使用的是通用存储库,而我的GetMapperVessels方法可能不适用于此设置。

任何人都可以澄清我在做什么错,并可能会帮助我解决问题吗?

0 个答案:

没有答案