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];
}
}
}
}