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; }
}

ViewModel中的New Model在ID为0时出错

我更喜欢有一个特定于创建操作的视图模型,它没有这个键,尽管为了重用,有些确实有。

在这种情况下,正如你提到的,零应该很好。不过,请确保密钥已写入页面,检查其中是否有零的隐藏字段。

确实,在插入数据库之前不会分配ID。但是视图模型将是无效的,因为它期望ProducerID被填充。尝试使用注释生产商ID字段

[Key]
public int ProducerID { get; set; }

但是,如果用户选择了一个已经存在的Producer,并且该ProducerId与注册不关联,那么用户显然会遇到与Producer不关联的问题。