2011-11-10 1 views
3

다음 클래스가 있습니다. 예를 들어 조금 단순화되었습니다.유효성 검사 대상 객체를 기반으로하는 사용자 정의 속성 이름

class LineInfo 
{ 
    Id, 
    LineNumber, 
    SubAccountNumer, 
    MobileNumber 
} 

class SuspendLinesVM{ 
    public List<LineInfo> Lines{ get;set; } 
} 

내 작업에서 SuspendLinesVM을 수신하고 모든 라인이 클라이언트로부터 동적으로 생성됩니다. 양식의 구체적인 LineInfo에 속하는 각 요소는 템플릿 'lineid {Id} _ElementName'과 이름이 있습니다.

lineid0001_SubAccountNumer

lineid0001_MobileNumber

lineid0021_LineNumber에게

lineid0001_LineNumber

lineid0021_SubAccountNumer

lineid0021_MobileNumber

,369을 : 그래서 그들은 같은 형태로 나에게 온다

유효성 검사 중에 오류가 발생하면 뷰에서 유효하지 않은 필드를 강조 표시하기 위해 요청에 따라 실패한 속성을 설정하는 방법이 필요합니다.

나는 혼란스러워하는 질문을 남겼습니다.

public class LineInfoValidator: AbstractValidator<LineInfo> 
    { 
     public LineInfoValidator() 
     { 
      RuleFor(m => m.LineNumber) 
       .NotEmpty().WithMessage("Line # is required").OverridePropertyName(???) 
       .InclusiveBetween(1, 9999).WithMessage("Line # must be in range [1, 9999]").OverridePropertyName(???) 
... 

내가 * (예, propertyName 형식) => 반환 및 String.format 같은 것을 할 수있는 방법이 필요합니다 ('lineid_ {0} _ {1}', instance.Id, propertyName 형식) *.

아이디어가 있으십니까? 이렇게하면

public class SelectedLinesVMValidator : AbstractValidator<SelectedLinesVM> 
{ 
    public SelectedLinesVMValidator() 
    { 
     RuleFor(x=>x.Lines).SetCollectionValidator(new LineInfoValidator()); 
    } 
} 

, 다음 as per the documentation 다시 오류의 컬렉션을 얻을 것이다 : 당신이 FluentValidator을 사용하고 있는지, 당신이 그렇게 같은 SuspendedLinesVM 개체의 컬렉션 검사기를 설정 할 수 있어야한다 감안할 때

답변

1

'WithState'방법으로 해결되었습니다. 제레미 덕분에! 그의 해결책은 불행하게도이 지원되는 것이 아닙니다 오후 5시 16분

여기 http://fluentvalidation.codeplex.com/discussions/278892

JeremyS
2011년 11월 10일입니다.

속성 이름은 유효성 검사기를 실행할 때 생성되는 오류 메시지와 달리 유효성 검사기가 인스턴스화 될 때 한 번만 해결됩니다. 이 경우 실제로 유효하지 않은 속성 이름을 생성하도록 인스턴스를 검사해야합니다. 사용자가 얻을 수있는 가장 가까운 인스턴스는 WithState 메서드를 사용하여 일부 사용자 지정 상태를 실패와 연결하는 것입니다.

RuleFor(x => x.LineNumber) 
    .NotEmpty() 
    .WithState(instance => string.Format("lineid_{0}_LineNumber", instance.Id)); 

일단 유효성 검사기를 호출하고 ValidationResult를 가져 오면 ValidationFailure의 CustomState 속성에서이 값을 검색 할 수 있습니다.

제레미 맞습니다

0

실패한 등록 정보의 색인과 관련됩니다.

+0

.그러나 내 컬렉션의 모든 LineInfo에 대한 귀하의 경우 각 속성 이름은 'LineNumber', 'SubAccountNumer'등과 동일합니다. 속성 이름은 'lineid0001_LineNumber'와 같아야하므로보기는 오류가 속한 LineInfo를 구분하지 않으며 오류를 전혀 렌더링하지 않습니다. 단지 그것이 그렇게 쉬웠다면 :) – Madman