Kendo MVC Wrapper Grid如何指定嵌套模型字段的数据类型
Kendo MVC Wrapper Grid 嵌套模型字段数据类型指定方案
- 核心配置逻辑:不要依赖组件对嵌套模型的自动类型识别,直接在Grid的DataSource配置段,通过
Model()方法手动显式声明所有嵌套字段的完整路径和对应类型,MVC Wrapper会自动将该配置序列化为前端可识别的schema规则,无需额外编写jQuery版本的原生配置。 - 标准配置示例(以嵌套日期字段为例):
@(Html.Kendo().Grid<DriverMainModel>() .Name("driverGrid") .Columns(columns => { // 其余常规列配置省略 columns.Bound(p => p.NestedDriverView.LicenseExpireDate).Filterable(f => f.UI("DatePicker")); columns.Bound(p => p.NestedDriverView.BirthDate).Filterable(f => f.UI("DatePicker")); }) .Filterable() .DataSource(ds => ds .Ajax() .Read(read => read.Action("QueryDriverList", "Driver")) .Model(model => { // 必须先声明顶层模型主键 model.Id(m => m.DriverId); // 逐一声明嵌套字段的完整路径和类型,路径必须与返回数据结构完全匹配 model.Field(m => m.NestedDriverView.LicenseExpireDate, typeof(DateTime)); model.Field(m => m.NestedDriverView.BirthDate, typeof(DateTime)); // 其余需要指定类型的嵌套字段按相同格式追加即可,支持多层级嵌套 }) ) )
- 注意事项:
- 如果字段是可空日期类型,类型参数请传入
typeof(DateTime?),不要直接使用typeof(DateTime),否则空值场景会触发类型校验报错。 - 禁止仅单独修改筛选器的UI控件为日期选择器,必须先完成DataSource层的字段类型声明,否则前端序列化筛选参数时仍会按字符串处理,直接抛出“date类型需为string”的栈错误。
- 如果使用服务端绑定模式而非Ajax绑定,除上述配置外,需要在应用启动入口(.NET Framework为Global.asax的Application_Start方法,.NET Core/5+为Program.cs)注册默认模型元数据提供程序,避免服务端排序、筛选时出现类型解析失败问题,注册代码如下:
- 如果字段是可空日期类型,类型参数请传入
// .NET Framework 版本 ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();
// .NET Core/.NET 5+ 版本 builder.Services.AddControllersWithViews() .AddDataAnnotationsLocalization();
内容的提问来源于stack exchange,提问作者John Lord
相关产品推荐
相关产品推荐

