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

如何定位Server Side Blazor UI中抛出空引用异常的代码行

排查Blazor Telerik Grid添加项时的空引用异常

一、查看完整异常上下文

  • 打开浏览器F12开发者工具,切换到**控制台(Console)**标签,查看异常的完整调用栈,里面会明确标注抛出异常的代码位置。
  • 若是服务器端Blazor,直接查看后端日志(如Serilog、NLog输出),日志会包含更详细的异常触发路径和null对象信息。

二、检查Grid事件方法实现

点击Add Item后,Grid会触发OnEdit和OnCreate事件,重点排查这两个方法:

  • 确认EditItem方法是否正确初始化了新的Claim_Item对象,尤其是关联属性(比如Claim_Reason),新对象未初始化关联属性会导致后续模板访问时报错。
  • 检查CreateItem方法中是否对传入的新Item做了空值校验,有没有处理未初始化的字段。

三、修复模板中的空引用风险点

你的代码里有几个明确的空引用隐患:

  1. 关联对象直接访问
<GridColumn Field="Claim_Reason.Description" Title="Reason" Editable="false">
    <Template>
        @((context as BQM.Data.Models.Claim_Item).Claim_Reason.Description)
    </Template>
</GridColumn>

新添加的Claim_Item的Claim_Reason大概率为null,直接访问Description会触发异常,改成空值保护:

@((context as BQM.Data.Models.Claim_Item).Claim_Reason?.Description ?? "无")
  1. EditorTemplate中的对象转换
    比如第一个EditorTemplate里:
var _claimItem = context as Data.Models.Claim_Item;

如果context为null,_claimItem就是null,后续绑定@_claimItem.BidId会报错,添加空值判断:

var _claimItem = context as Data.Models.Claim_Item;
if (_claimItem == null) { return; }
  1. 下拉框数据源初始化
    检查_bids、_items、_xrefItems这些集合是否在组件初始化时就被赋值为非null的空列表,避免点击Add Item时数据源为null:
private List<BidViewModel> _bids = new List<BidViewModel>();
private List<Bid_Item> _items = new List<Bid_Item>();
private List<Item> _xrefItems = new List<Item>();

四、开启Blazor详细错误提示

在Program.cs的开发环境配置中开启详细错误:

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseBlazorFrameworkFiles();
}

开启后页面会直接显示异常的具体触发位置和详细信息。

五、断点调试定位

  • 在Visual Studio中给OnEdit、OnCreate方法,以及各个EditorTemplate的代码块设置断点,点击Add Item后逐步执行,观察哪个对象为null。
  • 客户端Blazor可通过浏览器开发者工具的Sources标签,找到对应razor生成的JS文件设置断点调试。

内容的提问来源于stack exchange,提问作者Paul T. Rykiel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:15:39