在Kendo UI multiselect中设置值

时间:2013-07-30 16:30:34

标签: jquery asp.net-mvc-3 kendo-ui

我遇到了一些麻烦,并且无法找到这个特定问题的答案。当我提供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将要采用的方式格式化数据?提前致谢。

1 个答案:

答案 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