1

我遇到了一些麻烦,并且无法找到这个特定问题的答案。我有一个来自剑道的多选,当我提供了一个 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"]);,它就可以正常工作。此外,如果我在访问 ID 上尝试 JSON.Parse(),我会收到错误消息。我确实检查了 JSON 返回,它与硬编码示例 ["1","5"] 中的数据相同。我在做什么错/如何以 Kendo UI 将采用的方式格式化数据?提前致谢。

4

1 回答 1

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 文档

于 2013-07-30T17:15:23.847 回答