2016-08-07 1 views
0

Existe-t-il un moyen de déclencher le Comparer les données Annotation uniquement si le champ n'est pas vide? Sinon, quelle est une autre façon de le faire?MVC Comparer les e-mails si le champ de confirmation n'est pas vide

Ce code ci-dessous déclenche toujours l'annotation de données de comparaison, qu'elle ait ou non une valeur.

[EmailAddress] 
[Required] 
[Display(Name = "Email Address")] 
public string EmailAddress { get; set; } 

[Display(Name = "Confirm Email Address")] 
[Compare("EmailAddress", ErrorMessage = "The email addresses do not match.")] 
public string ConfirmEmailAddress { get; set; } 
+0

S'il vous plaît noter que l'étiquette modèle-vue-contrôleur est pour des questions sur le modèle. Il existe une balise spécifique pour l'implémentation ASP.NET-MVC. –

+0

@StephenMuecke. Oh d'accord ... Je vous vois déjà édité les tags. Je t'ai eu. –

Répondre

1

Il est peut-être plus facile d'étendre simplement l'attribut avec votre propre:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] 
public sealed class CompareEnhancedAttribute : CompareAttribute 
{ 
    public bool AllowEmptyStrings { get; set; } 

    public CompareEnhancedAttribute(string otherProperty) 
     : base(otherProperty) 
    { 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (AllowEmptyStrings && string.IsNullOrEmpty(value?.ToString())) 
     { 
      return ValidationResult.Success; 
     } 
     else 
     { 
      return base.IsValid(value, validationContext); 
     } 
    } 
} 

utiliser ensuite comme si:

public sealed class ContactModel 
{ 
    /* omitted other attributes */ 

    public string EmailAddress { get; set; } 

    [CompareEnhanced("EmailAddress", AllowEmptyStrings = true)] 
    public string ConfirmEmailAddress { get; set; } 
}