如何在ViewModel中为列表添加验证

时间:2014-12-18 19:41:16

标签: c# asp.net-mvc entity-framework viewmodel asp.net-mvc-validation

我有以下ViewModel:

public class InvitationViewModel
{
    public int id { get; set; }
    public string InvitationName { get; set; }
    public string Type { get; set; }
    public string RSVPStat { get; set; }
    public virtual List<Guests> guests { get; set; }
}

我想为访客列表添加一些验证,是否可以使用数据注释或是否有其他方式?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

由于你的问题有点不清楚,我会围绕基地。您可以向列表本身添加一些验证,如果这是您正在寻找的。这几乎只包括Required,它将验证列表至少有一个项目:

[Required]
public List<Guests> Guests { get; set; }

关键字virtual允许子类重写属性,方法或字段。最有可能的是,您在实体上看到了这一点,并认为您在视图模型中需要相同的内容。实体在引用和导航属性上使用virtual的原因是实体框架为您的实体创建代理类以提供延迟加载功能。代理(只是子类)会覆盖引用和导航属性,以插入必要的延迟加载代码。

如果您正在讨论将验证属性添加到实际Guest类的属性中,则不能仅仅为了视图模型而这样做。您添加到Guest的任何验证都将用于Guest的任何使用。但是,没有什么可以阻止你实现GuestViewModel或类似的类,然后你可以添加你喜欢的任何验证。

答案 1 :(得分:1)

您想验证每位客人吗?在这种情况下,标记Guest with Data annotations。如果您想要对列表本身进行验证(即访客数量),您可以编写自己的ValidationAttribute,或者可以在模型上实现IValidateableObject。

编辑:如果您的视图模型需要不同的验证,请创建一个GuestViewModel并使用所需的验证对其进行标记。