尝试填充嵌套的ViewModel时获取null

时间:2018-05-02 18:01:26

标签: c# asp.net asp.net-mvc

我有这样的模特:

   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
    {
        public decimal PersepcionesReales { get; set; }
    }

在控制器中我想把它填写为:

List<VMDetallePeriodoPAgo> LDPVM = new List<VMDetallePeriodoPAgo>();
            foreach (var i in periodos)
            {
                VMDetallePeriodoPAgo DPVM = new VMDetallePeriodoPAgo();

                DPVM.Modelo1.IdRecibo = i.IdRecibo;
                DPVM.Modelo1.Empleado = i.Empleado.Codigo;
                DPVM.Modelo1.Descripcion = i.Descripcion;
                DPVM.Modelo1.MontoISR = i.MontoIRS;
                LDPVM.Add(DPVM);
            }

问题是当我尝试执行它时,尝试在线填充模型:

 DPVM.Modelo1.IdRecibo = i.IdRecibo;

我总是得到:

  

对象引用未设置为对象的实例。

为什么会发生这种情况,我的建模是否有问题?此致

3 个答案:

答案 0 :(得分:2)

您应该在使用之前初始化子对象:

DPVM对象初始化中的代码更新为

VMDetallePeriodoPAgo DPVM = new VMDetallePeriodoPAgo() {Modelo1 = new DetallePeriodoPagoViewModel() , Modelo2 = new PerspectivaRealViewModel() };

当一个对象被实例化时,它被分配一块内存,并根据该对象下面的类提供的蓝图进行配置。

答案 1 :(得分:1)

在代码上方添加:

DPVM.Modelo1 = new DetallePeriodoPagoViewModel(); //Added code.
DPVM.Modelo1.IdRecibo = i.IdRecibo;

答案 2 :(得分:-1)

您的问题与嵌套或ViewModel无关。 Modelo1和Modelo2未在您提供的代码中初始化。

您可以尝试以下操作:

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

    public VMDetallePeriodoPAgo()
    {
            Modelo1 = new DetallePeriodoPagoViewModel();
            Modelo2 = new PerspectivaRealViewModel();
    }
}