Der Versuch, Fluent Validation zu verwenden, um sicherzustellen, dass ein Datumsbereich immer gefüllt ist und das Enddatum nicht vor dem Anfangsdatum auftritt.Fluent Validierung: 'DateTime' enthält keine Definition für 'Wert'
Ich habe den ersten Teil richtig gemacht, und es feuert korrekt, aber der zweite Teil scheint nicht ausführbar zu sein.
Mein Code:
public class Report1ToExcelValidator : AbstractValidator<Report1ToExcelViewModel> {
public Report1ToExcelValidator() {
RuleFor(x => x.Report1ToExcelDateFrom)
.NotEmpty().WithMessage("Please provide a valid beginning date for the range.");
RuleFor(x => x.Report1ToExcelDateTo)
.NotEmpty().WithMessage("Please provide a valid end date for the range.")
.GreaterThan(x => x.Report1ToExcelDateFrom.Value).WithMessage("The Date To must be after the Date From");
}
}
Wo alles ausgelöst aufsteht ist mit dem .GreaterThan
, die einen Fehler meldet:
'DateTime' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'DateTime' could be found
Mein Datetime nicht NULL-Werte zulässt, beide erfordern Inhalt Datetime. Wenn ich Intellisense erlaube, mögliche Optionen aufzurufen, ist alles nach dem Feldnamen auf Dinge wie .Date
und .Hour
beschränkt, die ebenfalls nicht funktionieren. .Value
existiert nicht in dieser Liste von Optionen, auch nicht .HasValue
.
Wirklich verwirrt auf diesem.
Auch eine andere Frage: Wie kann ich Validierungen für mehrere Formulare auf einer einzigen Seite trennen? Im Moment habe ich nur die eine Form, aber das Modell der Form wird direkt eingeführt. Ich kann anscheinend nicht herausfinden, wie ich das Modell des Formulars abstrahiere, so dass ich mehr als ein Modell auf einer Seite haben kann. Werden keine Daten gebracht in
Gerade jetzt habe ich nur die Modelle zu ändern versucht.
public class ReportViewModel {
public Report1ToExcelViewModel Report1ToExcelViewModel { get; set; }
}
[Validator(typeof(Report1ToExcelValidator))]
public class Report1ToExcelViewModel {
public Guid? Report1ToExcelRegion { get; set; }
public DateTime Report1ToExcelDateFrom { get; set; }
public DateTime Report1ToExcelDateTo { get; set; }
}
mit der Seite Referenzierung @model CCS.Models.ReportViewModel
statt @model CCS.Models.Report1ToExcelViewModel
aber ich kann die Seite nicht scheinen, in denen ziehen Report1ToExcelViewModel, damit die Formularfelder erkannt werden. Gerade jetzt sie Fehler aus, weil 'ReportViewModel' does not contain a definition for [fieldname]
, obwohl ich die Report1ToExcelViewModel
direkt in ReportViewModel
wie oben bringen.
verwenden würde nur 'gearbeitet haben. GrößerThan (x => x.Re port1ToExcelDateFrom) ' –
Es wird nicht richtig validiert. Wenn ich ein DateTo habe, das kleiner als das DateFrom ist, wird es nicht gefangen. Deshalb stelle ich die Frage, warum es nicht funktioniert. Außerdem haben alle Google-Quellen, die ich bis Ende 2015 gefunden habe und die auf MVC 5 verweisen, die Attribute '.Value' und' .HasValue' verwendet. –
Kann nicht etwas falsch mit Ihnen Code sehen, vorausgesetzt, Sie entfernen '.Value' –