2010-06-26 5 views
1

내장 된 ASP MVC 유효성 검사는 동일한 컨트롤러의 다른 동작에 대해 다르게 동작 할 수 있습니까? 예를 들어, 사용자 컨트롤러가 있고 생성, 편집 및 기타 작업과 같은 작업이 있습니다. 따라서 모델 사용자의 경우 특성 Username의 고유성이 검증됩니다. 동일한 사용자 이름을 가진 사용자가 있으면 오류 사용자 이름이 이미 표시됩니다. 따라서 편집 작업에 대해 동일한 유효성 검사기를 사용하면 사용자를 편집하는 동안 "username already present"오류가 발생합니다. 아무도이 문제를 해결할 방법이 있는지 말해 줄 수 있습니까? 참조 용으로 유효성 검사기 코드를 붙여 넣습니다.컨트롤러 동작에 특정한 asp mvc 유효성 검사?

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.ComponentModel.DataAnnotations; 

    namespace Models 
    { 
     [MetadataType(typeof(AdmiUserMetadata))] 
     public partial class AdminUser 
     { 
      public class AdmiUserMetadata 
      { 
       [Required(ErrorMessage = "Required Field")] 
       public string Id { get; set; } 

       [Required(ErrorMessage = "Required Field")] 
       [RegularExpression("[\\S]{6,}", ErrorMessage = "Must be at least 6 characters.")] 
       [Username(ErrorMessage = "Username already taken")] 
       public string Username { get; set; } 

       [Required(ErrorMessage = "Required Field")] 
       [RegularExpression("[\\S]{6,}", ErrorMessage = "Must be at least 6 characters.")] 
       public string Password { get; set; } 

       [Required(ErrorMessage = "Required Field")] 
       public string Name { get; set; } 

       [Required(ErrorMessage = "Required Field")] 
       [RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$", ErrorMessage ="Invalid E-mail ID")] 
       public string Email { get; set; } 

       [Required(ErrorMessage = "Required Field")] 
       [RegularExpression("(Active|Disabled)", ErrorMessage = "Select the status of User")] 
       public string Status { get; set; } 

       [Required(ErrorMessage = "Required Field")] 
       [RegularExpression("^[1-9]", ErrorMessage = "Select the group of User")] 
       public string Group { get; set; } 
      } 
     } 

     public class UsernameAttribute : ValidationAttribute 
     { 
      IUserRepository _repository = new UserRepository(); 
      public override bool IsValid(object value) 
      { 
       if (value == null) 
        return true; 
       if (_repository.IsUsernamePresent((string)value)) 
       { 
        return false; 
       } 
       return true; 
      } 
     } 
    } 

답변

0

귀하가 확인하는 것은 비즈니스 규칙입니다.

No two users can have the same username. 

나는이 규칙을 작성/편집 할 수있는 사용자 서비스가 있습니다. 속성은 입력 유효성 검증에 가장 적합합니다. (예 : 정수가 아닌가요? 유효한 이메일 주소입니까?)

+0

아마도 당신은 아마 ... 나는 속성 유효성 검사의 모든 요점을 가지고 있다고 생각합니다. 잘못 ... 어쨌든 머리를 주셔서 감사합니다 ... – Johnson

0

클래스에 유효성 검사를 결정하는 속성이있는 경우 어떻게 수행되는지는 알 수 없습니다. 이것은 분명히 대부분의 프로젝트에서 작동하지만 나에게도 이것은 효과가 없다.

다른 유효성 검사 규칙 집합을 첨부해야하는 경우 http://fluentvalidation.codeplex.com/을 확인하십시오. 나는 그것을 시도하고 그것을 좋아했다.

클라이언트 유효성 검사를 처리하지 않습니다. 대부분의 부분에서 ajax 호출을하기 때문에 클라이언트를 검증하는 것처럼 느껴졌습니다.

+0

링크를 이용해 주셔서 감사합니다 ... – Johnson