0

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

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

所有属性都按预期设置,除了一个简单的 string[] 属性始终为空。

网格指定如下:

@(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 库仍将 string[] 属性 Roles 保留为 null?

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

4

1 回答 1

2

我认为因为它没有将您发送的完全相同的模型传回给您,所以它创建了一个新的 UserViewModel 列表并尝试将值应用到它,并且不知道 string[] 的方式,因为它不是基本类型;有很多类型不支持。如果您更改模型以包含 RolesStr,它是一个字符串,并且模型中有方法可以从 string[] 来回转换为字符串(使用拆分等),那么我认为您会得到您想要的。在您的控制器获得 UserViewModel 后,只需调用该方法来重新填充角色。

我会在您的模型中创建可以接受整个列表并一次完成所有操作的静态方法,可能就像

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 让这两者的实现变得微不足道。

于 2013-02-21T06:00:15.137 回答