AJAX获取数据后无法选中Kendo DropDownList值求解决方案
解决Kendo DropDownList在Grid异步数据加载后无法选中值的问题
你遇到的核心问题是:grid.dataSource.read()是异步操作——当你在它之后立刻尝试设置DropDownList的值时,Grid的数据还没加载完成,DropDownList的选项可能还没更新,导致无法匹配选中。下面给你两种靠谱的解决方案:
方案一:利用DataSource的change事件触发设置逻辑
当Grid的数据源完成加载并更新时,会触发change事件,我们可以在这个事件里设置DropDownList的值:
function openWindow(e) { var wdw = $("#myWindow").data("kendoWindow"); wdw.open(); e.preventDefault(); var dataItem = this.dataItem($(e.currentTarget).closest("tr")); var grid = $("#grid").data("kendoGrid"); // 获取你的DropDownList实例,替换成实际的ID var dropdown = $("#yourDropDownId").data("kendoDropDownList"); // 先移除之前绑定的change事件,避免重复触发 grid.dataSource.off("change"); // 绑定change事件,数据加载完成后执行 grid.dataSource.on("change", function() { // 用value方法设置对应ID,替换成你实际要绑定的字段 dropdown.value(dataItem.TargetPropertyId); // 如果需要用文本匹配,也可以用text方法:dropdown.text(dataItem.TargetPropertyText); // 可选:如果后续不需要再触发这个逻辑,解绑事件 grid.dataSource.off("change"); }); grid.dataSource.transport.options.read.url = '@Url.Action("BindingList", "AttributeBinding")' + "?formId=" + dataItem.FormId; grid.dataSource.read(); $("#title").html(dataItem.FormTitle); }
方案二:使用read()返回的Deferred回调
Kendo的dataSource.read()会返回一个jQuery Deferred对象,我们可以用done()方法在数据加载完成后执行设置逻辑:
function openWindow(e) { var wdw = $("#myWindow").data("kendoWindow"); wdw.open(); e.preventDefault(); var dataItem = this.dataItem($(e.currentTarget).closest("tr")); var grid = $("#grid").data("kendoGrid"); var dropdown = $("#yourDropDownId").data("kendoDropDownList"); grid.dataSource.transport.options.read.url = '@Url.Action("BindingList", "AttributeBinding")' + "?formId=" + dataItem.FormId; // 在read()完成后执行设置逻辑 grid.dataSource.read().done(function() { dropdown.value(dataItem.TargetPropertyId); // 或者 dropdown.text(dataItem.TargetPropertyText); }); $("#title").html(dataItem.FormTitle); }
额外要注意的点:
- 确保你要设置的
value(或text)确实存在于DropDownList的选项里,否则无法选中 - 检查DropDownList的
dataValueField和dataTextField配置是否正确,要和你传入的值类型匹配 - 如果DropDownList有独立的数据源,需要确保它的数据源也完成加载后再设置值,逻辑和上面一致
内容的提问来源于stack exchange,提问作者Marcin Grzegorczyk
相关产品推荐
相关产品推荐

