2013-04-22 2 views
1

У меня есть множественный виджетКендо UI MultiSelect сообщение переплетены значения контроллера

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

supportedLanguages просто массив строк

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

значения связывают MULTISELECT правильно, и я могу выбрать язык из списка, но когда я отправляю эти значения обратно на контроллер, я получаю такие параметры сообщения

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

, поэтому связующее MVC не может правильно привязать эти значения к моей модели ViewModel.

ViewModel просто простой класс с одним свойством

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

Что я делаю не так?

ответ

2

Я не знаю причину такой реализации, но вот обходной путь для проблемы. Пример для MultiSelect внутри сетки с привязкой Ajax:

//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]; 
      } 
     } 
    } 
} 
Смежные вопросы