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

ASP.NET MVC Create视图枚举第二模型数据出现NullReferenceError解决方案

问题根因

你遇到的空引用错误完全是控制器没有给视图传递有效模型导致的:

  • GET请求的Create方法直接调用return View(),没有传入实例化的Software对象,视图渲染时Model本身就是null,访问Model.Departments这类属性自然触发空引用。
  • 就算你给空枚举加了判断能加载页面,下拉菜单也没有选项,完全达不到功能要求。
  • 另外POST请求如果模型校验失败返回视图时,你同样没有填充下拉需要的集合数据,后续提交报错后还是会触发同样的空引用问题。

修复步骤

1. 调整控制器的Create方法

修改GET和POST的两个Create方法,主动从数据库查询下拉需要的三类数据,赋值给Software对象后再传给视图:

public IActionResult Create()
{
    var software = new Software
    {
        Departments = _context.Departments.ToList(),
        Vendors = _context.Vendors.ToList(),
        Suppliers = _context.Suppliers.ToList()
    };
    return View(software);
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("SOFT_ID,SOFT_NAME,IT_CONTACT,SOFT_EXP_DATE,SOFT_SUP_PERIOD,SOFT_OUT_OF_SERVICE,SOFT_IS_RENEWED,DEPT_ID,VEND_ID,SUPP_ID")] Software software)
{
    if (ModelState.IsValid)
    {
        _context.Add(software);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    // 校验失败时也要重新填充下拉数据,不然返回页面还是会报错
    software.Departments = _context.Departments.ToList();
    software.Vendors = _context.Vendors.ToList();
    software.Suppliers = _context.Suppliers.ToList();
    return View(software);
}

2. 优化模型设计(可选但强烈建议)

你当前的模型设计有不规范的地方,容易触发绑定问题:导航属性不应该用ID后缀命名,建议拆分外键字段和导航属性,修改Software类对应部分:

// 新增外键字段
public int DEPT_ID { get; set; }
public int VEND_ID { get; set; }
public int SUPP_ID { get; set; }

// 导航属性改名,不要和外键重名
[Required]
public virtual Department Department { get; set; }
[Required]
public virtual Vendor Vendor { get; set; }
[Required]
public virtual Supplier Supplier { get; set; }

修改后视图里的下拉框要加上asp-for绑定对应外键字段,才能正常提交选中的值:

<select asp-for="DEPT_ID" class="form-control">
    <option value="" disabled selected>Select A Dept</option>
    @foreach (var item in Model.Departments)
    {
        <option value="@item.DEPT_ID">@item.DEPT_NAME</option>
    }
</select>

剩下两个供应商、厂商的下拉也按照同样规则修改即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:27:04