ViewModel中的New Model在ID为0时出错
本文关键字:0时 出错 ID 中的 New Model ViewModel | 更新日期: 2023-09-27 18:28:45
我有一个视图模型。
public class RegistrationViewModel
{
public RegisterModel Register { get; set; }
public Producer Producer { get; set; }
public IEnumerable<UserType> UserTypes { get; set; }
public IEnumerable<Producer> Producers { get; set; }
}
在视图中,用户输入他们的注册凭据,然后选择他们所属的生产商。他们也可以在页面上创建一个新的生产者。但是,当他们这样做时,我的ModelState是无效的,因为Producer没有ID字段。这是一个新的Producer记录,在我的数据库中创建它之前,我不需要分配ID,对吧?ID是我在SQL中的标识字段。我注意到,我为其他域模型构建的代码会毫无问题地返回ID 0。我这样做对吗?这与视图模型有关吗?如有任何帮助,我们将不胜感激。
生产者类别:
public class Producer
{
public int ProducerID { get; set; }
public string Name { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Postal { get; set; }
public string Country { get; set; }
[DataType(DataType.PhoneNumber)]
public string Phone { get; set; }
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
public string Website { get; set; }
public string CreatedBy { get; set; }
public DateTime CreatedOn { get; set; }
public string UpdatedBy { get; set; }
public DateTime? UpdatedOn { get; set; }
public Boolean Active { get; set; }
public virtual ICollection<Wine> Wines { get; set; }
}
我更喜欢有一个特定于创建操作的视图模型,它没有这个键,尽管为了重用,有些确实有。
在这种情况下,正如你提到的,零应该很好。不过,请确保密钥已写入页面,检查其中是否有零的隐藏字段。
确实,在插入数据库之前不会分配ID。但是视图模型将是无效的,因为它期望ProducerID被填充。尝试使用注释生产商ID字段
[Key]
public int ProducerID { get; set; }
但是,如果用户选择了一个已经存在的Producer,并且该ProducerId与注册不关联,那么用户显然会遇到与Producer不关联的问题。