重新加载 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 });
这解决了我的问题,现在多选显示正确。
在我们的项目中,我们在 .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 });
这解决了我的问题,现在多选显示正确。