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

ViewModel关联类未实例化引发Object reference空引用异常

解决“Object reference not set to an instance of an object”空引用异常

核心问题

你在View中执行@if (Model.appClassificationTxt.division == "test")时报错,本质是**appClassificationTxt对象本身为null**,而非division属性为空。ViewModel仅定义了该属性但未初始化,且Controller未给它赋值,导致访问其属性时触发空引用。另外,你的ViewModel定义和需求矛盾——你预期返回2条数据,但appClassificationTxt是单个对象,无法存储多条记录。

解决步骤

  1. 修正ViewModel定义(适配多数据需求)
    将单个对象改为集合类型,同时初始化避免null:

    public class YourViewModel
    {
        // 用List存储多条分类数据
        public List<tbl_classification> appClassificationList { get; set; } = new List<tbl_classification>();
    }
    
  2. Controller中查询数据库并赋值
    从数据库获取division为test1或test2的记录,赋值给ViewModel的集合属性:

    public IActionResult YourAction()
    {
        var viewModel = new YourViewModel();
        // 假设_dbContext是你的数据库上下文实例
        viewModel.appClassificationList = _dbContext.tbl_classification
            .Where(c => c.division == "test1" || c.division == "test2")
            .ToList();
        return View(viewModel);
    }
    
  3. View中遍历集合处理数据
    因为是多条数据,需要循环遍历并呈现:

    @foreach (var item in Model.appClassificationList)
    {
        <!-- 可直接使用item,因为查询时已过滤出目标数据 -->
        <p>应用名称:@item.app_name,分区:@item.division</p>
    }
    

补充:若仅需单个对象的处理方式

如果实际只需要单条数据,需确保Controller赋值且View中先判断对象非null:

  • Controller赋值:
    viewModel.appClassificationTxt = _dbContext.tbl_classification
        .FirstOrDefault(c => c.division == "test");
    
  • View中判断:
    @if (Model.appClassificationTxt != null && Model.appClassificationTxt.division == "test")
    {
        // 执行你的逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:21