创建 DataAnnotation 以确保用户指定了一种类型的电子邮件地址并且存在默认值

Create DataAnnotation to make sure user has specified one type of email address and there is a default

我有一个人 class,其中一个人可以有 3 种类型的电子邮件地址 - 家庭、工作、其他。

必须至少指定其中之一,并且必须指定默认电子邮件地址 - 这只是一个布尔值。

我要用 DataAnnotation 试试这个(如果这是正确的方法?!)

关于如何编写此 DataAnnotation 的任何想法?

public class Email
{
    [EmailAddress]
    public string Address { get; set; }

    public bool? Default { get; set; }
}

public class PersonEmail
{
    public Email Home { get; set; }

    public Email Work { get; set; }

    public Email Other { get; set; }
}

public class Person
{

    //Other property goes here
    //Other property goes here
    //Other property goes here
    //Other property goes here

    [MyDefaultEmailAddressValidation]   
    public PersonEmail Email { get; set; }

}   

就我个人而言,我会将 Person class 设为 IValidatableObject 并在必要时检查天气是否有效。

public class Person : IValidatableObject
{
    public PersonEmail Email {get;set;}

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var results = new List<ValidationResult>();
        if (Email.Home == null && Email.Work == null && Email.Other == null)
            results.Add(new ValidationResult("At least one email address have to be provided!"));
        return results;
    }
}

创建另一个 属性 以检查所有 3 个地址是否都是 ,并使用数据注释表明这个新的 属性 有一个 range 只能接受 true.

示例:

    [Range(typeof(bool), "true", "true", ErrorMessage = "The field Email must be informed.")]
    public bool IsEmailInformed
    {
        get
        {
            return (string.IsNullOrEmpty(Home.Address) == false ||
                    string.IsNullOrEmpty(Work.Address) == false ||
                    string.IsNullOrEmpty(Other.Address) == false);
        }
    }