如何将 Kendo 下拉列表转换为 Kendo 多选

Posted

技术标签:

【中文标题】如何将 Kendo 下拉列表转换为 Kendo 多选【英文标题】:How to convert Kendo dropdownlist into Kendo multiselect 【发布时间】:2020-01-08 04:18:22 【问题描述】:

我正在将现有代码中的 Kendo 下拉列表转换为 Kendo 多选。

角色代码:当前下拉列表(转换为 Kendo 多选)。

我没有得到正确的输出。

我有以下代码:

<div class="col-md-4 form-group">
                @html.LabelFor(model => model.RoleCode, htmlAttributes: new  ) <span style="color: Red">*</span>
                <select id="DDRolecode" multiple="multiple" data-placeholder="Select attendees...">

        </select>


</div>
...
...
var url = '@Url.Action("GetRoleCode", "FlowGenerator")';
            url = url + '?FlowID=' + flowid + '&RegID=' + RegId;
            $.ajax(


                url: url,
                dataType: 'json',
                type: 'POST',

                success: function (result) 

                    debugger;

                    //$("#DDRolecode").kendoDropDownList(
                    //    dataTextField: "Name",
                    //    dataValueField: "ID",
                    //    optionLabel: "Select",
                    //    dataSource: result

                    //);

                    $("#DDRolecode").kendoMultiSelect(
                        dataTextField: "Name",
                        dataValueField: "ID",                       
                        dataSource: result,
                    );

                     var selectedData = [];
                    for (var i = 0; i < result.length; i++) 


                        selectedData.push(
                            text: result[i].Name,
                            value: result[i].ID
                        )

                    

                    DDRoleCode.dataSource.data(selectedData);
                    //DDRoleCode.setDataSource(selectedData);
                    DDRoleCode.value('');
                    DDRoleCode.enable(true);

                ,
                error: function (data) 
                    debugger;
                    var itemRow = "<ul id='listError'><li>" + "Data Not Bind" + "</li></ul>";
                    FUNMessageBox(itemRow, "E", 0, 0, "", "");
                    // alert("error");
                
            );

以下是我获取角色代码的控制器代码:

 public JsonResult GetRoleCode(int FlowID,int RegID)
        
            IEnumerable<GenericValues1> RoleCode = _repository.Context.Database.SqlQuery<GenericValues1>("PROC_GET_ROLECODE @DATA_FLOW_ID=0,@REG_ID=1", FlowID, RegID).ToList().AsQueryable();

           // ViewBag.Tariffs = RoleCode;
            return Json(RoleCode, JsonRequestBehavior.AllowGet);


        

如您所见,我尝试在上述代码中使用多选功能。但它没有用。

【问题讨论】:

哪一部分不是特别有效?如数据源未绑定?您选择的值是否未预设?该代码有助于尝试和跟踪问题,但您没有说明具体问题是什么。 @DavidShorthose ibb.co/Ln6zQ4w 请检查链接。这就是我得到的。 但是你又没有说/显示实际问题是什么(你只能从图像中得到这么多)。我可以看到多选在那里,但看起来它处于禁用状态,这是问题吗? @DavidShorthose 我认为这是一个用户界面问题。我正在得到结果。但正如你所看到的多选结构,这对我来说是个问题。 @DavidShorthose 我的多选方法是否正确?因为我第一次尝试剑道.. 【参考方案1】:

为了避免冗长的评论链。

从您提供的第二张图片看来,multiple 多选问题被添加到同一项目中。这是因为您将新的multiselect control 附加到相同的输入。

这确实是一个简单的修复。 有两种方法可以修复它。 1)销毁剑道小部件并重新创建它 2)假设在底层数据源中使用相同的结构,其他设置只是将新的数据源数据应用于小部件。

这是一个向您展示两个示例的道场:

https://dojo.telerik.com/UxetijUy/2

就我个人而言,我会选择选项 2,因为它是一个 cleaner 解决方案,并且避免了不断销毁和重新创建小部件。

因此,如果您在第二个示例中更改所需的人员,它将从数据数组中获取随机数量的人员用于多选,然后将这些选项重新绑定到该控件。

因此,您对 ajax 调用所要做的就是一旦获得结果,只需将新数据应用到数据源,然后您就不需要像当前那样继续重新创建小部件。 所以在你的例子中:

       $("#DDRolecode").data('kendoMultiSelect').value(null);
       $("#DDRolecode").data('kendoMultiSelect').dataSource.data(selectedData);

这可确保您在附加新数据源之前清除所有选定的项目。

如果您需要有关正在发生的事情的更多信息。请询问,我会相应地更新我的答案。

【讨论】:

感谢您的回复..赞赏...:)【参考方案2】:

以下代码对我有用:

 $(document).ready(function () 
        debugger;

        $("#DDRolecode").kendoMultiSelect(
            dataTextField: "Name",
            dataValueField: "ID",
        );

        ....
        ....

//go to controller and call Sp and get the result
success: function (result) 

                    debugger;

                    var multiSelect = $('#DDRolecode').data("kendoMultiSelect");
                    multiSelect.value([]);

                    $("#DDRolecode").data("kendoMultiSelect").setDataSource(new kendo.data.DataSource( data: result ));                                    
                    var selectedData = [];
                    for (var i = 0; i < result.length; i++) 


                        selectedData.push(
                            Text: result[i].Name,
                            Value: result[i].ID
                        )

                    

【讨论】:

以上是关于如何将 Kendo 下拉列表转换为 Kendo 多选的主要内容,如果未能解决你的问题,请参考以下文章

kendo 下拉列表在下拉列表中显示选项标签

如何使 Kendo 下拉列表不区分大小写

Angular + Kendo:下拉列表的默认占位符

如何使用 jquery 禁用 kendo ui 下拉列表?

如何在 Kendo 下拉列表中添加默认文本?

Kendo UI 下拉列表采用最大选项的大小