0

projet actuel:Nested Où (x => x.Condition = valeur,() => {}); fluentvalidation

  • ASP.NET
  • 4.5.1 MVC 5

je dois savoir si je peux nid When() des déclarations comme celle-ci:

When(x => x.Cond1 == val1, 
() => { 
    When(x => x.SubCond1 == SubVal1, 
    () => { 
     When(x => x.Final1 == finalVal1, 
     () => { 
      RuleFor(x => x.Field1) 
       .NotEmpty().WithMessage("Should not be empty"); 
      // a few more here 
      }); 
     When(x => x.Final2 == finalVal2, 
     () => { 
      RuleFor(x => x.Field8) 
       .NotEmpty().WithMessage("Should not be empty"); 
      // a few more here 
      }); 
     }); 
    When(x => x.SubCond2 == SubVal2, 
    () => { 
     RuleFor(x => x.Field16) 
      .NotEmpty().WithMessage("Should not be empty"); 
     // a few more here 
     }); 
    }); 

Parce que la dernière chose que je veux est de décorer plus de 30 champs de formulaire comme ceci:

RuleFor(x => x.Field1) 
    .NotEmpty().WithMessage("Should not be empty") 
    .When(x => x.Cond1 == val) 
    .When(x => x.SubCond1 == SubVal1) 
    .When(x => x.Final1 == finalVal1); 

Cela est tout simplement indéfendable.

Aucune des conditions ne nécessite une validation, car aucune d'entre elles n'est réellement une zone modifiable par l'utilisateur (juste des valeurs sélectionnables par l'utilisateur); J'ai juste besoin de les comparer aux valeurs connues. J'utiliserais une instruction if/else si c'était en fait plus approprié, ce qui n'est pas le cas.

Le modèle est en grande partie plat, avec seulement le When() de second niveau représentant un modèle importé, et le troisième niveau étant différentes façons de gérer des champs spécifiques dans le modèle importé.

+0

Avez-vous essayé de le faire? –

+0

Oui, et ça ne semble pas tirer. –

+0

Clarification: ça ne semble pas tirer, c'est pourquoi j'ai posé la question. –

Répondre

1

Vous ne pouvez pas, mais vous pouvez essayer d'utiliser Rule Sets pour grouper vos règles. Peut-être aussi vérifier Cascade Mode.

+0

Il s'avère que je construisais à la fois mes modèles et ma validation erronée. Nettoyé à la fois, et maintenant tout fonctionne bien à nouveau. Mon problème était que ma forme était une chimère - il y avait du contenu provenant de deux modèles primaires différents qui étaient conditionnellement sur la page en fonction du rôle de l'utilisateur, et ensuite pour chaque rôle il y avait un modèle d'adresse amené de une à trois fois et elle-même était également subordonnée à la nécessité d'une adresse différente pour chaque objectif. J'ai extrait tous les modèles, et j'ai fait de même pour la validation. –

+0

En fin de compte, le seul 'When (x => x.cond1 == val1,() => {});' J'avais besoin d'une sous-section du modèle d'adresse où un utilisateur était présenté avec le pays/état & zip/province & postal options qui devaient être gérées juste. –

+0

Je mettrais cela comme une victoire. – Tarek