2015-10-23 1 views
0

Je l'ai utilisé avec succès withMessage sous la forme suivante:Courant withMessage ne fonctionne pas correctement avec un setValidator

RuleFor(p => p.MyField) 
      .NotEmpty()        
      .WithMessage("{0} is Required", 
           p => p.SomeOtherField 
          ); 

Cela permet à la valeur de SomeOtherField à utiliser dans le message d'erreur.

J'ai une exigence plus complexe, où j'utilise setValidator avec mon propre PropertyValidator personnalisé comme suit:

Ce que je pensais travailler était la suivante:

RuleFor(x => x.MyField)     
      .SetValidator(
        new RemoteValidator(       
         "Validate", 
         "Home", 
         System.Web.Mvc.HttpVerbs.Post, 
         "*.SomeOtherProperty1,*.SomeOtherProperty2") 
      ) 
      .WithMessage("{0} is not valid", 
           p => p.MyOtherField 
          ) 
      ; 

... mais il n'a pas . Lorsque la validation échoue, je reçois le message:

{0} n'est pas valide

par exemple. le {0} n'est pas remplacé

Des idées?

De here J'ai trouvé le concept de PropertyNameResolver qui semble pouvoir convenir, mais je n'arrive pas à comprendre comment le configurer. L'exemple sur ce lien donne:

ValidatorOptions.PropertyNameResolver = (type, member) => { 
    if(member != null) { 
    return member.Name + "Foo"; 
    } 
    return null; 
}; 

J'utilise Fluent Validations v5.6.2.

Répondre

0

Cela a été un problème avec mon validateur personnalisé.

Je suis this pattern ce qui le rend beaucoup plus personnalisé et encapsule l'attribut distant de MVC.

le remplacer par un plus "normal" validateur personnalisé, et ce bit fonctionne très bien:

.WithMessage("{0} is not valid", 
          p => p.MyOtherField 
         ) 
     ;