2012-03-14 2 views
1

FluentValidation을 사용하여 일부 ViewModel 객체에 대한 유효성 검사 논리를 표현하는 MVC 3 응용 프로그램이 있습니다. 다음과 같이 객체의FluentValidation을 사용하여 필드 또는 필드의 UI 오류를 표시하는 방법

하나는 두 가지 속성이 있습니다 :

[DisplayNameAttribute(UiConstants.Telephone)] 
    public string Telephone { get; set; } 

    [DisplayNameAttribute(UiConstants.Email)] 
    public string Email { get; set; } 

규칙은 이러한 속성 중 하나가 UI에 입력해야하고 나는 UI 중 적어도 하나에 대한 확인 메시지를 표시 할 사용자가 제출을 누르지 만 포스트 백을 수행하지 않을 때의 필드 (이메일).

내가 유효성이 검증

   RuleFor(contact => contact.Email) 
       .Must((contact, email) => string.IsNullOrWhiteSpace(email) != string.IsNullOrWhiteSpace(contact.Telephone)) 
       .WithMessage(ValidationConstants.EmailOrTelephone); 

에 다음 코드로 작동하도록 할 수 있으며이 있지만, 단지 다시 게시 후, UI에 내 유효성 검사 오류 메시지가 표시됩니다.

  Custom(contactUs => 
      { 
       return string.IsNullOrWhiteSpace(contactUs.Telephone) && string.IsNullOrWhiteSpace(contactUs.Email) 
        ? new ValidationFailure("Email", ValidationConstants.EmailOrTelephone) 
        : null; 
      }); 

을 다음 그러나이 같은 방식으로 행동으로

는 또한 사용자 정의 유효성 검사기를 사용했다.

내가 원하는 방식으로 작동하지 않습니까?

PostBack을 수행하지 않고 UI에 표시 할 오류 메시지를 얻기 위해 유효성 검사기를 수행하는 다른 방법이 있습니까?

DataAnnotations도 사용할 수 있지만 FluentValidation을 사용하여이 작업을 구체적으로 수행하려고합니다.

많은 감사

브라이언

답변

1

당신은 클라이언트 측 유효성 검사을 찾고 -이 FluentValidation 또는 DataAnnotations 특정하지 않습니다. 두 메커니즘 모두 자동으로 서버 측에서 작동합니다 (모델 바인딩 후 자동으로 FluentValidation을 실행하거나 수동으로 실행해야 함).

ASP.NET MVC에서 클라이언트 측 유효성 검사를 원하면 해당 비트를 연결해야합니다. This 블로그 항목이 도움이 될 수 있습니다.

하나의 메모 - 사용자 정의 유효성 검사기가 기본적으로 작동하지 않습니다 (클라이언트의 jQuery에서 해당 유효성 검사를 복제해야합니다). FluentValidation에 대한 this 기사를 확인하십시오. 여기에 자신을 다시 작성하지 않고도 클라이언트 측 "그냥 작동"한다 유효성 검사기를 보여줍니다 발췌 한 것입니다 : FluentValidation 또한 ASP.NET MVC의 클라이언트 측 유효성 검사와 함께 작동하지만 모든 규칙은 지원하지

하는 것으로. 예를 들어 조건을 사용하여 정의 된 모든 규칙 (When/Unless 포함), 사용자 정의 유효성 검사기 또는 반드시 호출은 클라이언트 측에서 실행되지 않습니다. 다음 유효성 검사기는 클라이언트에서 지원됩니다

* NOTNULL /는 NotEmpty

* 일치 (정규식)

* InclusiveBetween (범위)

* 크레딧 카드

* 이메일

* EqualTo (교차 속성 동등 비교)

* 길이