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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:46:07