Site详情视图引用Region模型字段触发NullReferenceException异常
问题说明
问题出现在Site模型对应的详情视图Details.cshtml中,视图渲染时触发System.NullReferenceException空引用异常。
触发异常的代码片段
<b>Region: </b> <a asp-controller="Regions" asp-action="Details" asp-route-id="@Model.RegionID"> @Model.Region.Name </a> </p>
异常触发逻辑
Site模型内定义了RegionID字段用于标记站点所属的关联区域,视图渲染时尝试读取关联Region模型的Name属性展示时抛出空引用错误。
问题根因
这是Entity Framework Core查询关联数据时的典型问题:查询Site实体时没有加载关联的Region导航属性,导致Model.Region为null,直接访问Name属性就会触发空引用;也有可能是数据库中当前Site对应的RegionID没有匹配的Region记录,导致关联属性为null。
可行解决方案
- 后端查询时添加贪婪加载
控制器中查询Site数据时,使用Include方法提前加载关联的Region导航属性,示例代码:// 引入EF Core命名空间 using Microsoft.EntityFrameworkCore; // 查询逻辑修改,追加Include加载关联属性 var site = await _dbContext.Sites .Include(s => s.Region) .FirstOrDefaultAsync(s => s.Id == 目标站点ID); - 视图层增加空值兜底判断
就算后端漏加载、或者关联数据不存在,视图也不会直接抛错,修改视图代码:<b>Region: </b> @if (Model.Region != null) { <a asp-controller="Regions" asp-action="Details" asp-route-id="@Model.RegionID"> @Model.Region.Name </a> } else { <span>无关联区域信息</span> } </p> - 校验数据库数据一致性
检查Site表中当前记录的RegionID值,确认该ID在Regions表中存在对应有效记录,排除脏数据导致的关联为空问题。
内容的提问来源于stack exchange,提问作者charbel
相关产品推荐
相关产品推荐

