重新加载 Kendo Multiselect 的数据源会创建多选的新实例

问题描述

在我们的项目中,我们在 .js 文件中创建了一个函数,用于将任何对象初始化为多选下拉列表。该函数接受两个参数。第一个是对象名称,第二个是 ajax 方法将数据加载到其中的 url。功能是这样的

function initializeMultiSelectCombo(comboName,url) {
$("#" + comboName).kendoMultiSelect({
    dataTextField: "Value",dataValueField: "Id",dataSource: {
        type: "json",transport: {
            read: {
                url: url,type: "POST",data: "json"
            }
        },autoClose: false
    }
    });
}

初始化我在上面调用的对象并传递需要作为多选显示数据的对象名称

initializeMultiSelectCombo("costCentreMulti","/CostCentre/GetDataForComboForBranch?branchId=0");

认情况下,我将 0 作为 branchId 传递,以便它加载所有分支的所有成本中心。控制器中的方法如下:

public JsonResult GetDataForComboForBranch(int branchId)
    {
        var list = _unitOfWork.CostCentres
            .GetListByUser(Convert.ToInt16(AppSession.Current.UserID),branchId).ToList();
        
        var comboList = list.Select(e => new { Id = e.CostCentreID,Value = e.CostCentre,Column2 = e.BranchLocation });
        return Json(comboList,JsonRequestBehavior.AllowGet);
    }

当我运行应用程序时,它看起来是这样的,成本中心下拉列表是一个多选下拉菜单,它显示所有分支的成本中心。

enter image description here

现在,如果用户从第一个下拉列表中选择任何分支,则多选应该重新加载并仅显示与所选分支关联的成本中心。为此,我使用与我们创建的相同的初始化函数,但只是这次我传递了与所选分支相关联的适当 branchid 而不是 0 作为 branchid。当我这样做而不是重新加载多选时,它会创建一个新实例。

enter image description here

每当我从第一个下拉列表中选择任何分支时,它都会创建新实例并显示那些已经存在的实例。

如何停止这个渲染过程,只根据传递的参数重新加载数据源和显示数据。

问候,

萨凡帕尔马

解决方法

我犯的错误是,当我想重新填充多选下拉列表时,我正在调用相同的初始化方法

initializeMultiSelectCombo("costCentreMulti","/CostCentre/GetDataForComboForBranch?branchId=0");

相反,我需要做的是使用具有适当参数的读取方法,它会重新加载数据源。

$("#costCentreMulti").data("kendoMultiSelect").dataSource.read({ branchId: branchId });

这解决了我的问题,现在多选显示正确。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...