2013-04-22 56 views
1

我有多項選擇控件劍道UI多選後綁定值到控制器

@(Html.Kendo().MultiSelect() 
     .Name("SupportedLanguages") 
     .Filter(FilterType.Contains) 
     .Placeholder("Select supported languages...") 
     .BindTo((System.Collections.IEnumerable)ViewData["supportedLanguages"])) 

supportedLanguages是一個字符串只是陣列

return new[] { "pl", "en", "sv" }; 

多選綁定值正確,我可以從列表中選擇語言,但當我將這些數值發回控制器時,我會得到這樣的後期參數

SupportedLanguages[]=pl&SupportedLanguages[]=sv&SupportedLanguages[]=en 

因此MVC活頁夾無法將這些值正確綁定到我的ViewModel。

視圖模型只是一個簡單的類有一個屬性

public List<string> SupportedLanguages { get; set; } 

我做錯了嗎?

回答

2

我不知道這種實現的原因,但這裏是解決問題的方法。帶有Ajax綁定的Grid內MultiSelect示例:

//Model 
public class Model 
{ 
    public Guid Id { get; set; } 

    [Required] 
    public string Name { get; set; } 

    /*MultiSelect for this property*/ 
    public IEnumerable<ChildModel> Children { get; set; }   
} 

//View 
@Html.Kendo().Grid<Model>() 
    .Name("Grid") 
    ... 
    .DataSource(cfg => cfg 
     .Ajax() 
     .PageSize(20) 
     .Model(c => c.Id(e => e.Id)) 
     .Update(c => c.Action("GridUpdate", "MyController").Data("getUpdateData")) 
) 

//JS 
var getUpdateData = function(data) { 
    MultiSelectHelpers.serialize(data); 
}; 

var MultiSelectHelpers = { 
    serialize: function (data) { 
     for (var property in data) { 
      if ($.isArray(data[property])) { 
       this.serializeArray(property, data[property], data); 
      } 
     } 
    }, 
    serializeArray: function (prefix, array, result) { 
     for (var i = 0; i < array.length; i++) { 
      if ($.isPlainObject(array[i])) { 
       for (var property in array[i]) { 
        result[prefix + "[" + i + "]." + property] = array[i][property]; 
       } 
      } 
      else { 
       result[prefix + "[" + i + "]"] = array[i]; 
      } 
     } 
    } 
}