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

ASP.NET Core Razor Page新建列表项时触发System.NullReferenceException问题

问题解决办法

空引用异常触发的核心原因如下:

  • Razor页面加载时,CreateModel的Items属性未初始化,访问@Model.Items直接触发空引用
  • 即使Items初始化,其导航属性Groups也未实例化,访问@Model.Items.Groups.Id会二次触发空引用
  • 若g_Mrthod.GetAllGroups()返回null,下拉框绑定asp-items也会抛出空引用异常

修复步骤

第一步:调整实体类,增加外键字段(推荐)

不直接绑定导航属性的子字段,增加显式外键更符合EF Core开发规范,也能从根源避免导航属性为空带来的绑定问题:

public class Items_Class
{
    public int Id  { get; set; }
    public string ItemName { get; set; }
    public decimal ItemPrice { get; set; }
    public decimal ItemQuantity { get; set; }
    // 新增显式外键字段,EF Core会自动识别为Groups导航属性的外键
    public int GroupId { get; set; }
    public Groups_Class Groups { get; set; }
}

第二步:初始化PageModel的绑定属性

在OnGet方法中初始化所有页面需要用到的属性,避免空值:

public void OnGet()
{
    // 处理分组列表为空的情况,默认赋值空列表避免下拉框绑定报错
    AllGroup = g_Mrthod.GetAllGroups() ?? new List<Groups_Class>();
    // 初始化绑定的Items对象和关联的Groups导航属性
    Items = new Items_Class 
    {
        Groups = new Groups_Class()
    };        
}

第三步:调整视图绑定逻辑

下拉框直接绑定新增的GroupId字段,不需要再访问导航属性的子字段:

<input asp-for="@Model.Items.Id" />
<label asp-for="@Model.Items.GroupId">Group name</label>
<select asp-for="@Model.Items.GroupId" asp-items="@(new SelectList(Model.AllGroup,"Id","GroupName" ))"></select>

如果不想修改实体类新增外键字段,仅完成第二步的属性初始化操作,原有视图绑定代码也可以正常运行,不会触发空引用异常。


内容的提问来源于stack exchange,提问作者Ahmed Essa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:45:04