我有一个viewmodel。
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而没有任何问题。我这样做是否正确?这与viewmodel有关吗?任何帮助将不胜感激。
制作人类:
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; }
}
答案 0 :(得分:0)
在插入数据库之前,您确实没有分配ID。但是viewmodel将无效,因为它需要填充ProducerID。尝试使用
注释producerID字段[Key]
public int ProducerID { get; set; }
但是,如果用户选择了现有的Producer,然后ProducerId与注册无关,那么您显然会遇到用户未与Producer关联的问题。
答案 1 :(得分:0)
我更喜欢拥有一个特定于没有此密钥的创建操作的视图模型,尽管有些重复使用。
在这种情况下,正如你所提到的,零应该没问题。确保密钥已写入页面,检查其中包含零的隐藏字段。