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

填充嵌套ViewModel时出现Null值问题

解决嵌套ViewModel出现Null值的问题

我来帮你分析下嵌套ViewModel获取到Null值的常见原因和对应解决办法,结合你给出的模型代码来看:

首先先把你的模型代码整理补全(补充了PerspectivaRealViewModel的占位结构):

public class VMDetallePeriodoPAgo 
{ 
    public DetallePeriodoPagoViewModel Modelo1 { get; set; } 
    public PerspectivaRealViewModel Modelo2 { get; set; } 
}

public class DetallePeriodoPagoViewModel 
{ 
    public int ID { get; set; } 
    public int IdRecibo { get; set; } 
    public string Descripcion { get; set; } 
    public int IdPeriodoPago { get; set; } 
    public string Empleado { get; set; } 
    public decimal Ingresos { get; set; } 
    public decimal MontoISR { get; set; } 
}

public class PerspectivaRealViewModel 
{ 
    // 这里是你的自定义属性定义
}

常见原因及解决办法

  • 未初始化嵌套属性
    C#中引用类型的属性默认是Null,当你实例化VMDetallePeriodoPAgo时,Modelo1和Modelo2不会自动创建实例,这是最常见的触发原因。
    解决办法有两种:

    1. 声明属性时直接初始化:
      public class VMDetallePeriodoPAgo 
      { 
          public DetallePeriodoPagoViewModel Modelo1 { get; set; } = new DetallePeriodoPagoViewModel(); 
          public PerspectivaRealViewModel Modelo2 { get; set; } = new PerspectivaRealViewModel(); 
      }
      
    2. 在构造函数中初始化:
      public class VMDetallePeriodoPAgo 
      { 
          public DetallePeriodoPagoViewModel Modelo1 { get; set; } 
          public PerspectivaRealViewModel Modelo2 { get; set; } 
      
          public VMDetallePeriodoPAgo()
          {
              Modelo1 = new DetallePeriodoPagoViewModel();
              Modelo2 = new PerspectivaRealViewModel();
          }
      }
      
  • 赋值/绑定时未创建嵌套实例
    如果是手动给ViewModel赋值,或者在前端表单/API请求绑定数据时,没有正确处理嵌套对象,也会导致Null。

    • 后端手动赋值时,要先实例化嵌套对象再设置属性:
      var vm = new VMDetallePeriodoPAgo();
      // 先实例化Modelo1再赋值属性
      vm.Modelo1 = new DetallePeriodoPagoViewModel
      {
          ID = 1,
          IdRecibo = 1001,
          Descripcion = "月度薪资明细",
          // 其他属性按需赋值
      };
      
    • 如果是前端表单提交,要使用正确的命名格式(比如Modelo1.IdRecibo),这样ASP.NET的ModelBinder才能正确识别并创建嵌套实例。
  • 序列化/反序列化配置问题
    如果是通过API接收JSON数据,若JSON中没有包含嵌套对象的结构,或者序列化工具的配置忽略了空对象,也会导致嵌套属性为Null。
    解决办法:确保传入的JSON包含嵌套对象的结构,或者调整序列化配置。比如用System.Text.Json时:

    var options = new JsonSerializerOptions
    {
        DefaultIgnoreCondition = JsonIgnoreCondition.Never
    };
    var vm = JsonSerializer.Deserialize<VMDetallePeriodoPAgo>(jsonString, options);
    

如果你的问题是在特定框架(比如ASP.NET Core MVC、Blazor等)中出现的,可以补充更多场景细节,我能帮你更精准地排查~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:29:33