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

ASP.NET MVC中控制器访问itemCheck时出现NullReferenceException的原因

解决System.NullReferenceException: Object reference not set to an instance of an object.

这个空引用错误的核心原因很明确:在你的POST Action里,m.ItemList是null,所以当你尝试访问它的itemCheck属性时就会抛出异常。

为什么会出现这个问题?

ASP.NET MVC的模型绑定机制在处理POST请求时,会自动创建CategoryItemViewModel的实例,但它不会自动初始化ViewModel里的引用类型属性(比如ItemList,它是Item类型,属于引用类型)。虽然你的视图里生成了ItemList.itemCheck的表单字段,但模型绑定无法凭空创建一个Item实例来承载这个值——除非你提前给ItemList分配了实例。

解决方案

最优雅且一劳永逸的办法是在CategoryItemViewModel的构造函数里初始化它的引用类型属性:

public class CategoryItemViewModel {
    // 添加构造函数,初始化两个引用类型属性
    public CategoryItemViewModel() {
        ItemList = new Item();
        CategoryList = new Category();
    }

    public Item ItemList { get; set; }
    public Category CategoryList { get; set; }
}

这样,当模型绑定创建CategoryItemViewModel实例时,ItemList和CategoryList都会被自动初始化为对应的实例,表单提交的ItemList.itemCheck值会被正确绑定到m.ItemList.itemCheck上,你就不会再遇到空引用异常了。

如果你不想修改ViewModel的构造函数,也可以在POST Action里手动检查并初始化ItemList:

[HttpPost]
public ActionResult Items(string ItemDescription, CategoryItemViewModel m) {
    // 先检查ItemList是否为null,若为null则初始化
    if (m.ItemList == null) {
        m.ItemList = new Item();
    }

    bool originalValue = m.ItemList.itemCheck;
    // 后续的文件操作代码...
    return View();
}

不过这种方式需要你在每个用到ItemList的POST Action里都做判断,不如构造函数初始化的方式简洁。

额外提醒

如果你的CategoryList在后续的POST逻辑里也需要被访问,记得也要按照同样的方式初始化它,避免遇到相同的空引用问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:47:51