我正在使用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演示或论坛上找不到与此相关的任何内容。
答案 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让这两个人的实现变得微不足道。