2010-05-27 2 views
2

Comment obtenez-vous la validation côté client sur deux propriétés telles que le scénario classique mot de passe de mot de passe de confirmation.Annotations de données Asp.Net MVC. Comment faire pour obtenir la validation côté client sur 2 propriétés étant égal

J'utilise une classe de métadonnées basée sur le mappage EF sur ma table DB, voici le code.

Les attributs commentés sur ma classe m'obtiendront la validation côté serveur mais pas le côté client.

[MetadataType(typeof(MemberMD))] 
public partial class Member 
{ 

    //[CustomValidation(typeof(MemberMD), "Verify", ErrorMessage = "The password and confirmation password did not match.")] 
    //[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password did not match.")] 
    public class MemberMD 
    {   

     [Required(ErrorMessage = "Name is required.")] 
     [StringLength(50, ErrorMessage = "No more than 50 characters")] 
     public object Name { get; set; } 

     [Required(ErrorMessage = "Email is required.")] 
     [StringLength(50, ErrorMessage = "No more than 50 characters.")] 
     [RegularExpression(".+\\@.+\\..+", ErrorMessage = "Valid email required e.g. [email protected]")] 
     public object Email { get; set; } 


     [Required(ErrorMessage = "Password is required.")] 
     [StringLength(30, ErrorMessage = "No more than 30 characters.")] 
     [RegularExpression("[\\S]{6,}", ErrorMessage = "Must be at least 6 characters.")] 
     public object Password { get; set; } 

     [Required] 
     public object ConfirmPassword { get; set; } 

     [Range(0, 150), Required] 
     public object Age { get; set; } 


     [Required(ErrorMessage = "Postcode is required.")] 
     [RegularExpression(@"^[a-zA-Z0-9 ]{1,10}$", ErrorMessage = "Postcode must be alphanumeric and no more than 10 characters in length")] 
     public object Postcode { get; set; } 

     [DisplayName("Security Question")] 
     [Required] 
     public object SecurityQuestion { get; set; } 

     [DisplayName("Security Answer")] 
     [Required] 
     [StringLength(50, ErrorMessage = "No more than 50 characters.")] 
     public object SecurityAnswer { get; set; } 



     public static ValidationResult Verify(MemberMD t) 
     { 
      if (t.Password == t.ConfirmPassword) 
       return ValidationResult.Success; 
      else 
       return new ValidationResult(""); 
     } 
    } 

Toute aide serait grandement appréciée, comme je l'ai fait seulement 5 mois s'il vous plaît essayer de ne pas me faire perdre la tête.

Répondre

0

1) L'objet ConfirmPassword doit être configuré de manière similaire au mot de passe. 2) l'objet ConfirmPassword devrait avoir un autre OriginalPasswordInputControl de propriété qui est le « Mot de passe » et 3) dans votre classe utilitaire ou whereever votre validation de traitement vérifiera:

//Probably in a function - something like Protected bool ValidateControl()   
if (elementToValidate.Password != OriginalPasswordInputControl.Password) 
      { 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
0

Vous pouvez utiliser l'attribut CompareTo. Comme les réponses à cette question ont souligné, ils ne sont pas très flexibles, mais répondraient à vos besoins.

1

Il vous suffit de mettre cela sur votre attribut ConfirmPassword.

[Compare("Password", ErrorMessage = "Passwords don't match.")] 
    [Required] 
    public object ConfirmPassword { get; set; } 

Cela signifie qu'il va comparer votre attribut ConfirmPassword avec votre attribut Password.

Questions connexes