2016-08-18 13 views
0

FluentValidationで一般的です。私はバリデータを書いていますが、ErrorMessageではなくWarningMessageで.WithMessageを実行し、paramsを使用する方法を理解できないようです。FluentValidationのWithMessageメソッドをWarningMessageのパラメータで使用する

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

をしかし、それはにErrorMessageとしてそれを設定し、私は警告メッセージを必要とする:

私はこれを行うことができます。あなたがもし(ModelState.IsValid)行にブレークポイントを置けばあなたが見ることができるので、それ自体がオブジェクトである -

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の他のプロパティで。

エラーがあるもの(およびエラーメッセージ)は、存在するかどうかです。問題がなければエラーメッセージは表示されず、問題がある場合はエラーメッセージが追加されます。

モデル状態は、あなたのコントローラで、私は

​​

を使用して、すべてのエラーメッセージになるだろうし、各1を反復し、あなたがそれで何をしたいのかを決める有効でない場合、私は、あなただったら。

私があなたに尋ねている/試みようとしていることが完全にわからないので、これが答えるか、少なくとも助けてくれることを願っています。

0

FluentValidation(またはMvcのModelState)に警告メッセージが直接実装されることはありません。

FluentValidationでは、この目的で使用できる WithState()拡張メソッドがあります。

まず、あなたは、静的クラスでは、いくつかの拡張メソッドを書くことができます警告とエラーを使用するには、次に列挙

public enum ValidationErrorLevel 
    { 
     Error, 
     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(); 
} 

を管理するために使用する他の少数のそれを使用することができ、あなたのバリデータクラスで

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

を使用するための一つの使用する必要があります

validator.Validate(<someclass>) 

代わりの

validator.ValidateAndThrow(<someclass>) 




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

あなたはその後、例えば

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

、にModelStateにエラーを入れて、警告のために何かを行う、例えばTempDataを

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

にそれを置くことができますその後、他のTempDataのように表示することができます。

関連する問題