asp.net-mvc - 具有复杂子属性的 Kendo 对象的模型绑定(bind)问题

标签 asp.net-mvc grid model-binding kendo-grid

我有一个 Kendo UI 网格,它允许我将多个更改发布到服务器。绑定(bind)到网格的模型包含复杂类型的列表。这是(简化的):

public class User
{    
    public int ID { get; set; }
    public string Name { get; set; }
    public List<Role> Roles { get; set; }        
}

为了更新服务器上的更改,我的 Controller 中有一个具有以下签名的方法:

public ActionResult UpdateUtilisateurs([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<User> users)

users 集合已正确填充,但 Roles 列表为空。我已经使用 Firebug 确保数据实际上是来回序列化的。这是我在到达 Controller 之前更新 1 行时的 POST:

filter  
group   
models[0].ID                     16
models[0].Name                   Amir Majic
models[0].Roles[0][Code]         dbadmin
models[0].Roles[0][Description]  Database Administrator
models[0].Roles[0][ID]           33
sort

所以数据看起来不错(除了 Roles 属性中可能缺少点?)。那么我必须更改方法签名吗?我是否必须创建一个自定义模型绑定(bind)器(尽管我猜这是一个相当常见的场景)?

最佳答案

有完全相同的问题。问题在于子属性的括号(models[0].Roles[0][Code] 而不是 models[0].Roles[0].Code )。在将数据发送到服务器(或更新默认模型绑定(bind)器)之前,您将需要一个解析函数。

Kendo 支持给我发送了一个解决方案:

在 Ajax 数据源中:

.Update(update => update.Action("Update", "Controller").Data("serialize"))
.Create(create => create.Action("Create", "Controller").Data("serialize"))

稍后在 View (或 JS 文件)中

<script>
    function serialize(data) {
        for (var property in data) {
            if ($.isArray(data[property])) {
                serializeArray(property, data[property], data);
            }
        }
    };

    function serializeArray(prefix, array, result) {
        for (var i = 0; i < array.length; i++) {
            for (var property in array[i]) {
                result[prefix + "[" + i + "]." + property] = array[i][property];
            }
        }
    }
</script>

如果您计划使用网格来编辑复杂对象的集合,我现在就告诉您,您会后悔您的决定。只是一个友好的警告,可以节省您几天的时间浪费:)

关于asp.net-mvc - 具有复杂子属性的 Kendo 对象的模型绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18149982/

相关文章:

ASP.NET MVC3 JSON 模型绑定(bind)与嵌套类

asp.net-mvc - ASP.NET MVC - 当参数为 null 时绑定(bind)空集合

extjs - 记住列宽、位置和(in)可见

html - 网格布局容器中没有高度

java - 如何在网格java中实现计时器

c# - MVC Razor View 中的 HTML.Textarea 值

asp.net-mvc - formcollection 只保存选定的 html.listbox 项目值? MVC

c# - ASP.NET MVC 4 自定义角色授权显示/隐藏 View 中的编辑/删除链接

asp.net-mvc - ASP.NET MVC : Uses a delegate field as an action method?

asp.net-mvc-3 - protected 内部集合属性的模型绑定(bind)