Kendo Grid Not Databinding在调用Update Method之前

时间:2013-02-20 14:57:15

标签: kendo-ui

我正在使用Kendo Grid,并在Read方法中加载了一组ViewModel。这里的一切都很好,并按预期工作。

但是,当在网格上单击保存按钮时,呈现给Update方法的对象将不再完整和可用。

除了简单的string []属性始终为null之外,所有属性都按预期设置。

网格指定如下:

@(Html.Kendo().Grid<Occam.Portal.ViewModels.UserViewModel>()
    .Name("SystemUserGrid")
    .Columns(columns =>
        {
            columns.Bound(user => user.UserName);
            columns.Bound(user => user.Email);
            columns.Bound(user => user.Roles):
         }
.Ajax()
.Batch(true)
.ServerOperation(false)
.Events(events => events.Error("error_handler"))
.Model(model =>
    {
        model.Id(m => m.UserId);
        model.Field(p => p.UserName).Editable(false);
        model.Field(p => p.Roles).Editable(false);
    })

.Read("SystemUsers_Read", "Administration")
.Update("SystemUsers_Update", "Administration")
  ))
...

为什么Kendo库会将字符串[]属性Roles保留为null,尽管数据正确绑定到网格?

我在Kendo演示或论坛上找不到与此相关的任何内容。

1 个答案:

答案 0 :(得分:2)

我认为因为它没有传回你发送的完全相同的模型,它会创建一个新的UserViewModel List并尝试将值应用于它,并且不知道string []如何,因为它不是基类型;有许多类型不受支持。如果你改变你的模型以包含RolesStr这是一个字符串并且在模型中有方法来回从string []转换为字符串(使用split等),那么我认为你会得到你想要的。控制器获取UserViewModel后,只需调用方法重新填充角色。

我会在你的模型中创建可以接受整个List的静态方法,并且可以像

那样一次完成
public static IList<UserViewModel> SplitEm(IList<UserViewModel> userViewModels)
{
    [Split each RolesStr into Roles]
}
public static IList<UserViewModel> JoinEm(IList<UserViewModel> userViewModels)
{
    [Join all the Roles into each RoleStr]
}

显然看看Linq让这两个人的实现变得微不足道。