当尝试从包含同时需要更新的2个模型的字段的ViewModel构造视图时,我不断收到一条错误消息:
运行所选代码生成器时发生错误:
'实体类型'UserRegViewModel'需要定义主键。'
如果我添加主键
[Key]
public int Id { get; set; }
对于ViewModel,将为ViewModel创建一个包含所有字段的数据库表,我怀疑这是ViewModels的正确用法。
我的意图是使用ViewModel从视图中获取表单,然后在我的控制器中,将VM中的每个属性映射到每个域模型。如果我保留声明的主键,那么我可以手动完成此操作(例如,将ViewModel发送到View,然后将ViewModel放回HttpPost控制器的参数中),但是我假设我必须为此做错了确实如此。
我相信我遵循所有约定(在Model,Views,Controllers,ViewModels的独立文件夹中),以及在ViewModels文件夹中名为xxxxViewModel.cs的ViewModel。
编辑:
完整的UserRegViewModel代码:
using SERVICAPUY.Models.Business;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace SERVICAPUY.ViewModels
{
public class UserRegViewModel
{
//[Key]
//public int Id { get; set; } // must be public!
//public Usuario usuario { get; set; }
//public IEnumerable<Prestamo> Prestamos { get; set; }
//Usuario
[Required(ErrorMessage = "El Nombre es obligatorio")]
public string Nombre { get; set; }
public string Cedula { get; set; }
public string Direccion { get; set; }
public string Direccion2 { get; set; }
public string Ciudad { get; set; }
public string Estado { get; set; }
[Display(Name = "Código Postal")]
public string CodPostal { get; set; }
[Display(Name = "País")]
public string Pais { get; set; }
public string Telefono { get; set; }
[DataType(DataType.Date)]
public DateTime? FechaNacimiento { get; set; }
//Prestamo
public Auto auto { get; set; }
[Required(ErrorMessage = "Cuántas cuotas son?")]
[Range(1, 120, ErrorMessage = "El número de cuotas debe ser entre 1 y 120.")]
public int Cuotas { get; set; }
[Required(ErrorMessage = "Cuál es el monto del préstamo?")]
public double Monto { get; set; }
[Required(ErrorMessage = "Cuál es el interés?")]
[Display(Name = "Interés")]
public double? Interes { get; set; }
[Required(ErrorMessage = "Qué día del mes le toca al usuario hacer el pago?")]
[Display(Name = "Día de Pago")]
[Range(1, 31, ErrorMessage = "El día de pago corresponde a día del mes.")]
public int? DiaDePago { get; set; }
[Display(Name ="Tipo de Prestamo")]
public tipoPrestamo tipoPrestamo { get; set; }
public Estatus Estatus { get; set; }
}
}
最佳答案
@ZivWeissman找到了答案。在评论中。 DbContext类中有一个对ViewModel的引用。也许这引起了另一个问题,因为我很肯定没有在其中添加参考,但是目前,该问题已解决。
关于c# - ASP.NET Core(MVC)ViewModel请求主键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51369732/