Задание начального значения не работает должным образом в Kendo UI Multiselect - PullRequest
0 голосов
/ 02 октября 2018

текущая реализация работает хорошо, если начальным значением является элемент на первой странице, загруженный ValueMapper, но нет, если оно находится в конце списка.Я использую виртуализацию, потому что список содержит тысячи элементов.

@(Html.Kendo().MultiSelectFor(m => m.EmployeeIds)
                        .Name("EmployeeIds")
                        .DataTextField("Value")
                        .DataValueField("Key")
                        .AutoBind(true)
                        .DataSource(source =>
                        {
                            source.Custom()
                                .ServerFiltering(false)
                                .ServerPaging(false)
                                .Transport(transport =>
                                {
                                    transport.Read(MVC.Request.ActionNames.GetEmployeeList, MVC.Request.Name);
                                });
                        })
                        .Events(e =>
                        {
                            e.DataBound("setInitialWatchers");
                        })
                        .Placeholder("Insert a watcher...")
                        .Virtual(v => v.ItemHeight(26).ValueMapper("watchersMapper")))  

Я устанавливаю начальные значения для события DataBound:

function setInitialWatchers() {
                            //to ensure only one initial bound will ocur
                            //as it is bounded on every page/scroll down
                            if (countBound == 0) {
                            $.ajax({
                                url: "@Url.Action(MVC.Request.ActionNames.GetInitialWatchers, MVC.Request.Name, new { RequestId = Model.Id })",
                                success: function (data) {
                                    $("#EmployeeIds").data("kendoMultiSelect").value(data);
                                }
                            });
                            countBound++
                        }
                          }
                          function watchersMapper(options) {
                        $.ajax({
                        url: "@Url.Action(MVC.Request.ActionNames.GetEmployeeList_ValueMapper, MVC.Request.Name)",
                        type: "GET",
                        success: function (data) {
                            options.success(data);
                             }
                           });

В контроллере:

public virtual JsonResult GetEmployeeList(string optionLabel = null)
        {
            var emplpyees = Facade.EmployeeBusinessLogicFacade.GetAllKeyValue().OrderBy(e => e.Value).ToList()

;
                return Json(emplpyees.TryAppendOptionLabel(optionLabel), JsonRequestBehavior.AllowGet);
            }  
...