FluentValidation, Wenn & muss?
Ich versuche verwenden FluentValidation validaton, wenn dropdownlist Wert ist yes
- und das Feld muss das Datum. es funktioniert, wenn dropdownlist ist yes
Prüfung für date
. Aber
auch zeigt die Validierung, wenn ich wählen Sie No
noch sagt es Must be date
.
Sollte es keine überprüfung mehr, ob dropdownlist-Wert otherthan die yes
. Wie können wir das tun?
RuleFor(x => x.DtPublishedTimeText)
.NotEmpty()
.When(HasMaterialPublishedElseWhereText)
.WithMessage("Required Field")
.Must(BeAValidDate)
.WithMessage("Must be date");
private bool BeAValidDate(string val)
{
DateTime date;
return DateTime.TryParse(val, out date);
}
private bool HasMaterialPublishedElseWhereText(MeetingAbstract model)
{
return model.HasMaterialPublishedElseWhereText != null &&
model.HasMaterialPublishedElseWhereText.Equals("yes");
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Punkt, den Sie haben, ist die
When
Prädikat gilt nur eine Regel. Sie müssen bedingte überprüfung auf demNotEmpty
UND dieMust
.Gibt es zwei Möglichkeiten, dies zu erreichen. Option 1 ist aufgeräumter, wenn es nur ein paar bedingte Regeln, sonst würde ich verwenden Sie die option 2.
Oder
Tun Anmerkung: ich habe keine Ahnung, was
HasMaterialPublishedElseWhereText
ist oder wie es aussieht. Ich gehe davon aus, dass Sie können verwenden Sie es als ein PrädikatEDIT:
Ich würde auch einen Blick auf die Umgestaltung der
HasMaterialPublishedElseWhereText
- Methode, die folgende ist weniger fehleranfällig.HasMaterialPublishedElseWhereText
der dropdown-Liste aus. Also ich bin der überprüfung derHasMaterialPublishedElseWhereText
Wert istyes
undDtPublishedTimeText
ist nicht leer, und es solltedate
HasMaterialPublishedElseWhereText
MethodeMüssen Sie nur ändern Sie die Reihenfolge der Anrufe. Versuchen Sie dies:
Den
When
gilt für alle bisherigen Bestimmungen. Also in Ihrem code, wenn Sie den Antrag direkt nach derNotEmpty
es sich nur um dieNotEmpty
Regel und nicht dieMust
Regel.Komplettes demo auf DotNetFiddle.