2013-07-30 45 views
1

我遇到了一些麻煩,並沒有能夠找到這個特定問題的答案。我有一個來自kendo的多重選擇,當我有一個ID提供時,需要它來填充它的值。在視圖中我檢查,如果我有在查詢字符串在Kendo UI multiselect中設置值

$(function() { 
       if (visitationID != "") {     

        var visitationIDs = $.getJSON('/Visitation/GetVisitationTypesByID', { id: visitationID }, 'json');       
        $("#visitTypeMulti").data("kendoMultiSelect").value(visitationIDs); 
       } 
      }); 

ID和如何我聲明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 

      }); 

並且最後返回該visitIDs在陣列控制器的代碼。我正在使用一個現有的查詢,然後刪除文本,所以它返回一個只有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); 

     } 

當我設置的值我看不出有什麼變化,但如果我把它改爲硬編碼值​​它工作得很好。另外,如果我在訪問ID上嘗試使用JSON.Parse(),則會出現錯誤。我沒有檢查JSON返回,它是硬編碼示例[「1」,「5」]中的相同數據。我在做什麼錯了/我如何格式化Kendo UI要採用的方式?提前致謝。

回答

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