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

Reloading datasource of Kendo Multiselect creates new instance of multiselect

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

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

初始化我调用上面函数的对象,并将需要显示数据的对象名称传递为 multiselect。

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);
    }

当我 运行 申请时,它是这样的,成本中心下拉列表是一个多 select 并且它显示所有分支机构的成本中心。

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

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

我怎样才能停止这个渲染过程并且只re-load数据源并根据传递的参数显示数据。

此致,

沙湾帕尔玛

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

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

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

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

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