如何定位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做了空值校验,有没有处理未初始化的字段。
三、修复模板中的空引用风险点
你的代码里有几个明确的空引用隐患:
- 关联对象直接访问
<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 ?? "无")
- 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; }
- 下拉框数据源初始化
检查_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
相关产品推荐
相关产品推荐

