我有这样的模特:
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;
我总是得到:
对象引用未设置为对象的实例。
为什么会发生这种情况,我的建模是否有问题?此致
答案 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();
}
}