web-dev-qa-db-fra.com

DataAnnotation pour comparer deux propriétés

Existe-t-il un moyen d'utiliser des annotations de données pour comparer deux champs de formulaire (par exemple pour confirmer une adresse e-mail) identiques, avant d'autoriser la publication du formulaire?

par exemple. l'annotation de données d'expression régulière peut-elle utiliser la fonction de correspondance pour référencer une autre propriété dans un ViewModel?

27
Mark

Utilisez le CompareAttribute

public string EmailAddress {get; set;}

[Compare(nameof(EmailAddress), ErrorMessage = "Emails mismatch")]
public string VerifiedEmailAddress { get; set; }
44
dove

Comme une option possible auto-validation:

Implémentez une interface IValidatableObject avec la méthode Validate, où vous pouvez mettre votre code de validation.

public class TestModel : IValidatableObject
{
    public string Email{ get; set; }
    public string ConfirmEmail { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (Email != ConfirmEmail)
        {
            yield return new ValidationResult("Emails mismatch", new [] { "ConfirmEmail" });
        }
    }
}

Veuillez noter: il s'agit uniquement d'une validation côté serveur.

14
Andrei