我遇到了一些麻烦,并且无法找到这个特定问题的答案。当我提供ID时,我有一个来自剑道的多选项需要它来填充它的值。在视图中,我检查查询字符串中是否有ID
$(function () {
if (visitationID != "") {
var visitationIDs = $.getJSON('/Visitation/GetVisitationTypesByID', { id: visitationID }, 'json');
$("#visitTypeMulti").data("kendoMultiSelect").value(visitationIDs);
}
});
以及我如何声明multiSelect
<div id="visitTypeDiv">
<label>Visit Type: </label>
<input id="visitTypeMulti" />
</div>
var visitTypes = $("#visitTypeMulti").kendoMultiSelect({
placeholder: "Select a visitation type...",
dataTextField: "VisitationType",
dataValueField: "VisitationTypeID",
autoBind: false,
filter: "contains",
dataSource: {
type: "json",
serverFiltering: true,
transport: {
read: "/Visitation/GetVisitationTypes",
dataType: "json"
}
},
highlightFirst: true,
ignoreCase: true
});
最后是在数组中返回visitID的控制器代码。我正在使用现有的查询,然后删除文本,因此它返回一个只有ID(整数)的数组,我知道它们需要是字符串,所以我强制它们成为一个字符串数组。
public ActionResult GetVisitationTypesByID(int id)
{
VisitationDetailsModel model = new VisitationDetailsModel();
var rawData = model.RetrieveVisitationTypes(id);
//now gurantee I strip out the Airport visitation
string[] visitTypes = rawData.Select(x => x.VisitationTypeID.ToString()).ToArray();
return Json(visitTypes, JsonRequestBehavior.AllowGet);
}
当我设置值时,我看到没有变化但是如果我将其更改为硬编码值$("#visitTypeMulti").data("kendoMultiSelect").value(["1","5"]);
它工作得很好。此外,如果我在visitationIDs上尝试JSON.Parse(),我会收到错误。我确实检查了JSON返回,它与硬编码示例[“1”,“5”]中的数据相同。我做错了什么/如何以Kendo UI将要采用的方式格式化数据?提前致谢。
答案 0 :(得分:2)
事情并行发生......当你这样做时:
var visitationIDs = $.getJSON('/Visitation/GetVisitationTypesByID', { id: visitationID }, 'json');
$("#visitTypeMulti").data("kendoMultiSelect").value(visitationIDs);
你有一个线程正在执行getJSON
,这需要一些时间......
与此同时,您的主线程使用visitationIDs
...但可能仍然没有数据。
尝试在两个句子之间设置提醒:
var visitationIDs = $.getJSON('/Visitation/GetVisitationTypesByID', { id: visitationID }, 'json');
alert("Wait some time and the click ok for continuing");
$("#visitTypeMulti").data("kendoMultiSelect").value(visitationIDs);
如果这有效,我的理论是正确的......现在你应该做的是在数据到达后分配值。类似的东西:
var jqXHR = $.getJSON('/Visitation/GetVisitationTypesByID', { id: visitationID }, 'json');
jqXHR.done(function (data) {
$("#visitTypeMulti").data("kendoMultiSelect").value(data);
});
请参阅jQuery.getJSON文档here