Razor页面两表关联查询失效,触发NullReferenceException
可能的原因及解决方法
1. Model.Client 或 Model 本身为空
先在视图开头添加调试代码,定位空引用的具体层级:
@if (Model == null) { <p>Model 为空</p> } else if (Model.Client == null) { <p>Model.Client 为空</p> }
如果是Model.Client为空,检查后台PageModel的OnGet方法:
- 确认传入的参数(比如ClientId)是否正确,是否能匹配数据库中的Client记录
- 检查查询代码是否正确,比如是否用了
FirstOrDefault却没处理返回null的情况
2. Client.Shots 导航属性未被加载
EF Core默认不会自动加载关联的导航属性(懒加载需额外配置,且Razor页面中容易因上下文提前释放失效)。解决方法是在查询Client时显式包含Shots:
修改后台PageModel的查询代码:
public IActionResult OnGet(int clientId) { // 使用 Include 加载关联的 Shots 集合 Client = _context.Clients .Include(c => c.Shots) .FirstOrDefault(c => c.Id == clientId); if (Client == null) { return NotFound(); } return Page(); }
3. Shots 属性未初始化空集合
在Client模型中,将Shots属性初始化为空集合,避免未加载时出现null:
public class Client { // 其他属性 public int Id { get; set; } public string Name { get; set; } // 初始化为空List,确保不会为null public ICollection<Shot> Shots { get; set; } = new List<Shot>(); }
这样即使未加载到Shots,Model.Client.Shots.Count也会返回0,不会触发NullReferenceException。
内容的提问来源于stack exchange,提问作者MelB
相关产品推荐
相关产品推荐

