Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Kendo UI MultiSelect将绑定值后置到控制器_C#_Telerik_Kendo Ui_Kendo Asp.net Mvc - Fatal编程技术网

C# Kendo UI MultiSelect将绑定值后置到控制器

C# Kendo UI MultiSelect将绑定值后置到控制器,c#,telerik,kendo-ui,kendo-asp.net-mvc,C#,Telerik,Kendo Ui,Kendo Asp.net Mvc,我有多选小部件 @(Html.Kendo().MultiSelect() .Name("SupportedLanguages") .Filter(FilterType.Contains) .Placeholder("Select supported languages...") .BindTo((System.Collections.IEnumerable)ViewData["supportedLanguages"])) supportedLan

我有多选小部件

@(Html.Kendo().MultiSelect()
      .Name("SupportedLanguages")
      .Filter(FilterType.Contains)
      .Placeholder("Select supported languages...")
      .BindTo((System.Collections.IEnumerable)ViewData["supportedLanguages"]))
supportedLanguages只是字符串数组

return new[] { "pl", "en", "sv" };
正确选择多个绑定值,我可以从列表中选择语言,但是当我将这些值发布回控制器时,我会得到这样的post参数

SupportedLanguages[]=pl&SupportedLanguages[]=sv&SupportedLanguages[]=en
因此MVC绑定器无法将这些值正确绑定到我的ViewModel

ViewModel只是一个具有一个属性的简单类

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

我做错了什么?

我不知道这种实现的原因,但这里有解决问题的方法。具有Ajax绑定的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];
            }
        }
    }
}