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

EF脚手架生成的Create方法返回.cshtml插入页@Html.EditorFor报NullReferenceException

问题原因说明

1. 为什么EF脚手架默认生成的Create方法没有传递模型实例?

早期ASP.NET MVC设计时默认对@Html.EditorFor做了null兼容:当视图未接收到模型实例、Model属性为null时,EditorFor会直接根据属性的类型元数据生成空白表单控件,不会触发空引用异常,因此脚手架默认简化了代码,不需要在GET请求的Create方法中额外实例化空模型。

2. 为什么之前运行正常,突然出现空引用异常?

通常是项目发生了以下几类变更,打破了原有兼容逻辑:

  • 模型类新增了非可空值类型属性(比如int UserId、DateTime CreateTime这类没有加?声明为可空的属性):当根模型为null时,EditorFor解析表达式访问值类型成员的过程中会直接抛出空引用,引用类型属性则不会触发该问题。
  • 项目升级了ASP.NET MVC版本:部分高版本MVC调整了EditorFor的null处理逻辑,不再静默兼容根模型为null的场景。
  • 项目开启了C# 8+的可空引用类型校验:视图声明的@model为非可空类型时,框架会对Model为null的场景做更严格的检查,触发异常。
  • 新增了自定义EditorTemplate:如果你为特定类型添加了自定义编辑器模板,模板中直接访问Model成员未做null判断,也会在根模型为null时触发异常。

最优实践

你当前手动实例化模型传递给视图的解决方案是完全合理的,也是兼容性最好的写法,不受框架版本、模型属性类型的影响,推荐所有新增页统一使用该写法,修改后的GET方法参考:

public ActionResult Create()
{
    return View(new UserModel());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:24:00