ViewModel中的新模型ID为0时出错

时间:2012-03-23 19:12:11

标签: c# asp.net-mvc-3

我有一个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; }

}

2 个答案:

答案 0 :(得分:0)

在插入数据库之前,您确实没有分配ID。但是viewmodel将无效,因为它需要填充ProducerID。尝试使用

注释producerID字段
[Key]
public int ProducerID { get; set; }

但是,如果用户选择了现有的Producer,然后ProducerId与注册无关,那么您显然会遇到用户未与Producer关联的问题。

答案 1 :(得分:0)

我更喜欢拥有一个特定于没有此密钥的创建操作的视图模型,尽管有些重复使用。

在这种情况下,正如你所提到的,零应该没问题。确保密钥已写入页面,检查其中包含零的隐藏字段。