2016-08-18 5 views
0

FluentValidation에서 일반적입니다. 유효성 검사기를 쓰고 있는데 ErrorMessage 대신 WarningMessage를 사용하여 .WithMessage를 수행하고 params를 사용하는 방법을 알아낼 수 없습니다.FluentValidation의 WithMessage 메서드를 경고 메시지가있는 매개 변수와 함께 사용

RuleFor(x => x.Endorsement) 
      .Must((coverage, endorsement) => HaveCoveragePerAcreOverMinimum(_coverage, coverage)) 
      .When(x => (!HaveSpecialRequest(_coverage) && !HavePermissionsToOverrideLimits())) 
      .WithMessage("Some error message {0}", x => x.MyError); 

을하지만은 ErrorMessage가로 설정하고 내가 경고 메시지가 필요합니다

나는이 작업을 수행 할 수 있습니다. 나는이 있지만 주사위 시도 : (일반적으로)

RuleFor(x => x.Endorsement) 
      .Must((coverage, endorsement) => HaveCoveragePerAcreOverMinimum(_coverage, coverage)) 
      .When(x => (!HaveSpecialRequest(_coverage) && !HavePermissionsToOverrideLimits())) 
      .WithMessage(new WarningMessage("Some warning message {0}", x => x.MyError)); 

답변

0

유효성 검사 ModelState에 오류를 부착을 - 당신이 만약 (ModelState.IsValid) 라인에 브레이크 포인트를 넣어 경우에 당신이 볼 수 있도록 객체는 그 자체로 이는 ModelState의 다른 속성에서.

오류 (및 오류 메시지)가있는 것 또는없는 것입니다. 문제가없는 경우 오류 메시지가 나타나지 않고 문제가있는 경우 오류 메시지가 추가됩니다. 모델 상태가 컨트롤러에서 나는

var allErrors = ModelState.Values.SelectMany(v => v.Errors); 

를 사용하는 모든 오류 메시지를 얻을 것 다음 각 하나를 반복하고 당신이 그것으로 수행 할 작업을 결정 유효하지 않은 경우

것은 내가 당신이라면.

나는 당신이 묻고있는/시도하고있는 것을 완전히 확신하지 못하기 때문에이 답변이나 도움이되기를 바랍니다.

0

FluentValidation (또는 Mvc의 ModelState)에는 경고 메시지가 직접 구현되지 않습니다.

FluentValidation에서이 목적으로 사용할 수있는 WithState() 확장 방법이 있습니다.

첫째, 당신은 당신이 정적 클래스에 몇 가지 확장 방법을 쓸 수 있습니다 경고 및 오류를 사용하여, 다음 열거

public enum ValidationErrorLevel 
    { 
     Error, 
     Warning 
    } 

을 만들 수 있습니다.

한 당신이이 방법을 사용할 수 있습니다 검사기 클래스

public static IRuleBuilderOptions<T, TProperty> AsWarning<T, TProperty>(this IRuleBuilderOptions<T, TProperty> rule) 
{ 
    return rule.WithState<T, TProperty>(x => ValidationErrorLevel.Warning); 
} 

을에서 사용하는

RuleFor(x => x.Endorsement) 
      .Must((coverage, endorsement) => HaveCoveragePerAcreOverMinimum(_coverage, coverage)) 
      .When(x => (!HaveSpecialRequest(_coverage) && !HavePermissionsToOverrideLimits())) 
      .WithMessage("Some error message {0}", x => x.MyError) 
      .AsWarning(); 

유효성 검사는 다음

public static IList<ValidationFailure> GetWarnings(this ValidationResult result) 
{ 
    return result.Errors.Where(m => m.CustomState != null && Convert.ToInt32(m.CustomState) == (int)ValidationErrorLevel.Warning).ToList(); 
} 

public static IList<ValidationFailure> GetErrors(this ValidationResult result) 
{ 
    return result.Errors.Except(result.GetWarnings()).ToList(); 
} 

결과 관리하기 위해 사용하는 다른 몇몇 경우 사용해야합니다.

대신 당신은 다음 예를

foreach (var error in result.GetErrors()) { 
    ModelState.AddModelError(error.PropertyName, error.ErrorMessage); 
} 

를 들어, ModelState 오류를 넣어 및 경고에 대한 다른 무언가를, 예를 들어

TempData["warnings"] = new List<string>(); 
((List<string>)TempData[WarningMessageKey]).AddRange(result.GetWarnings().Select(warning => warning.ErrorMessage)); 

TempData에 넣을 수

validator.ValidateAndThrow(<someclass>) 




var results = validator.Validate(<someclass>); 

그런 다음 다른 TempData처럼 표시 할 수 있습니다.

관련 문제