You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Telerik Kendo Grid中处理可为空属性列的报错问题?

问题场景

在基于ASP.Net Core MVC的应用中使用Telerik Kendo Grid组件,配置列时使用以下代码:

.Columns(columns =>
{
    columns.Bound(x => x.PrimaryContact.EmailAddress)
})

运行时抛出错误:

Uncaught TypeError: Cannot read properties of null

原因是PrimaryContact属性可能为null。尝试用三元表达式处理:

columns.Bound(x => x.PrimaryContact != null ? x.PrimaryContact.EmailAddress : string.Empty)

但出现新错误:

InvalidOperationException: Bound columns require a field or property access expression.

需要解决Kendo Grid中支持可为空嵌套列的问题。


解决方案1:使用Template()替代Bound()

放弃直接绑定嵌套属性,改用模板处理null判断,避开Bound()对表达式的限制:

.Columns(columns =>
{
    columns.Template(x => x.PrimaryContact?.EmailAddress ?? string.Empty)
           .Title("Email Address");
})

通过C#空合并运算符??处理null场景,直接生成显示内容,配置简洁且无绑定限制。

解决方案2:扩展模型的计算属性

在实体类中新增计算属性,封装null判断逻辑,再绑定该属性:

// 实体类示例
public class YourModel
{
    public Contact PrimaryContact { get; set; }
    
    // 封装null判断的计算属性
    public string PrimaryContactEmail => PrimaryContact?.EmailAddress ?? string.Empty;
}

Grid中直接绑定计算属性:

.Columns(columns =>
{
    columns.Bound(x => x.PrimaryContactEmail)
           .Title("Email Address");
})

将逻辑封装在模型内,Grid配置更简洁,符合MVVM设计思路。

解决方案3:结合Bound()与ClientTemplate()

若需保留服务器端绑定的排序、过滤特性,可在前端模板中处理null:

.Columns(columns =>
{
    columns.Bound(x => x.PrimaryContact.EmailAddress)
           .ClientTemplate("#= PrimaryContact ? PrimaryContact.EmailAddress : '' #")
           .Title("Email Address");
})

注意:需确保服务器端数据不会因PrimaryContact为null抛出异常,可提前初始化空对象或预处理数据,否则服务器端绑定仍会报错。


内容的提问来源于stack exchange,提问作者Demian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:20:32