0

Aktuelles Projekt:Geschachtelt wo (x => x.Condition = Wert,() => {}); fluentvalidation

  • ASP.NET 4.5.1
  • MVC 5

Ich muss wissen, wenn ich kann Nest When() Aussagen wie folgt aus:

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 
     }); 
    }); 

Weil das letzte, was ich will, ist 30 Form Felder wie dieses zu dekorieren:

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); 

Das ist einfach unhaltbar.

Keine der Bedingungen erfordert eine Überprüfung selbst, da keine von ihnen tatsächlich vom Benutzer editierbare Felder sind (nur vom Benutzer wählbare Werte); Ich muss sie nur mit bekannten Werten vergleichen. Ich würde eine if/else-Anweisung verwenden, wenn das tatsächlich passender wäre, was nicht der Fall ist.

Das Modell ist weitgehend flach, wobei nur die zweite Ebene When() für ein importiertes Modell steht und die dritte Ebene unterschiedliche Möglichkeiten zur Verarbeitung bestimmter Felder innerhalb des importierten Modells darstellt.

+0

Haben Sie versucht, das zu tun? –

+0

Ja, und es scheint nicht zu feuern. –

+0

Klarstellung: Es scheint nicht zu feuern, weshalb ich die Frage gestellt habe. –

Antwort

1

Sie können nicht, aber Sie können Rule Sets versuchen und verwenden, um Ihre Regeln zusammen zu gruppieren. Überprüfen Sie auch Cascade Mode.

+0

Es stellte sich heraus, dass ich sowohl meine Modelle als auch meine Validierung falsch konstruierte. Beide aufgeräumt, und jetzt läuft alles wieder gut. Mein Problem war, dass meine Form eine Chimäre war - sie hatte Inhalt von zwei verschiedenen primären Modellen, die bedingt auf der Seite waren, abhängig davon, welche Rolle der Benutzer hatte, und dann wurde für jede Rolle ein Adressmodell ein- bis dreimal eingefügt und es war auch davon abhängig, ob für jeden Zweck eine andere Adresse benötigt wurde. Ich abstrahierte alle Modelle und tat dasselbe für die Validierung. –

+0

Am Ende wurde das einzige 'When (x => x.cond1 == val1,() => {});' Ich brauchte für einen Unterabschnitt des Address-Modells, wo ein Benutzer mit Land/Staat & PLZ/Provinz & Postal präsentiert wurde Optionen, die genau richtig behandelt werden mussten. –

+0

Ich würde das als einen Sieg setzen. – Tarek