2

중복 된 사용자 이름 및 전자 메일에 대한 사용자 지정 유효성 검사를 만들려고합니다.중복에 대한 사용자 지정 유효성 검사가 작동하지 않습니다.

public class RegisterModel 
{ 
    [Required(ErrorMessage = "Username is empty")] 
    [StringLength(100, ErrorMessage = "Minimum 5 symbol", MinimumLength = 5)] 
    [CustomValidation(typeof(RegisterModel), "ValidateDuplicateUsername")] 
    [RegularExpression(@"^[a-zA-Z0-9]+$", ErrorMessage = "Username invalid")] 
    public string UserName { get; set; } 

    [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Enter valid e-mail")] 
    [Required(ErrorMessage = "E-mail is empty")] 
    [DataType(DataType.EmailAddress)] 
    [CustomValidation(typeof(RegisterModel), "ValidateDuplicateEmail")] 
    public string Email { get; set; } 

    [Required(ErrorMessage = "Password is empty")] 
    [StringLength(100, ErrorMessage = "Minimum 6 symbol", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Compare("Password", ErrorMessage = "Password not same")] 
    public string ConfirmPassword { get; set; } 

    public static ValidationResult ValidateDuplicateUsername(string username) 
    { 
     if (username != null) 
     { 
      bool isValid = true; 
      MembershipUserCollection users = Membership.GetAllUsers(); 
      foreach (MembershipUser item in users) 
      { 
       if (item.UserName.ToUpper().Equals(username.ToUpper())) 
       { 
        isValid = false; 
       } 
      } 

      if (isValid) 
      { 
       return ValidationResult.Success; 
      } 
      else 
      { 
       return new ValidationResult("Username exists"); 
      } 
     } 
     else return new ValidationResult("Minimum 5 symbol"); 
    } 

    public static ValidationResult ValidateDuplicateEmail(string email) 
    { 
     if (email != null) 
     { 
      bool isValid = true; 
      MembershipUserCollection users = Membership.GetAllUsers(); 
      foreach (MembershipUser item in users) 
      { 
       if (item.Email.ToUpper().Equals(email.ToUpper())) 
       { 
        isValid = false; 
       } 
      } 

      if (isValid) 
      { 
       return ValidationResult.Success; 
      } 
      else 
      { 
       return new ValidationResult("Username exists with this email"); 
      } 
     } 
     else return new ValidationResult("Enter valid e-mail"); 
    } 
} 

모든 검증 작업,하지만 내 사용자 지정 유효성 검사 -ValidateDuplicateUsername 및 ValidateDuplicateEmail이 작동하지 : 모델이 너무입니다. 여기서 뭐가 잘못 됐니?

+0

일을? 클라이언트 측 또는 서버 측? 클라이언트 측에서는 속성이 IClientValidatable을 구현해야합니다. – jgauffin

+0

클라이언트 측. "사용자 이름이 비어 있습니다", "최소 5 개의 기호"등의 나머지 유효성 검사 오류가 발생합니다. –

답변