问题描述
在我们的项目中,我们在 .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);
}
当我运行应用程序时,它看起来是这样的,成本中心下拉列表是一个多选下拉菜单,它显示所有分支的成本中心。
现在,如果用户从第一个下拉列表中选择任何分支,则多选应该重新加载并仅显示与所选分支关联的成本中心。为此,我使用与我们创建的相同的初始化函数,但只是这次我传递了与所选分支相关联的适当 branchid 而不是 0 作为 branchid。当我这样做而不是重新加载多选时,它会创建一个新实例。
每当我从第一个下拉列表中选择任何分支时,它都会创建新实例并显示那些已经存在的实例。
如何停止这个渲染过程,只根据传递的参数重新加载数据源和显示数据。
问候,
萨凡帕尔马
解决方法
我犯的错误是,当我想重新填充多选下拉列表时,我正在调用相同的初始化方法
initializeMultiSelectCombo("costCentreMulti","/CostCentre/GetDataForComboForBranch?branchId=0");
相反,我需要做的是使用具有适当参数的读取方法,它会重新加载数据源。
$("#costCentreMulti").data("kendoMultiSelect").dataSource.read({ branchId: branchId });
这解决了我的问题,现在多选显示正确。