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"); 
    } 
} 

所有驗證工作,但我的自定義驗證 - ValidateDuplicateUsernameValidateDuplicateEmail無法正常工作。這裏有什麼問題?

+0

工作在哪裏?客戶端或服務器端?客戶端要求你的屬性實現'IClientValidatable'。 – jgauffin

+0

客戶端。因爲「用戶名爲空」,「最少5個符號」等等,我得到了其他的驗證錯誤。 –

回答