Попытка использования Fluent Validation для обеспечения того, чтобы диапазон дат всегда заполнялся и что дата окончания не встречается до начала.Fluent Validation: «DateTime» не содержит определения для «Значение»
У меня есть первая часть, выполненная правильно, и она срабатывает правильно, но вторая часть кажется нереализуемой.
Мой код:
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");
}
}
Где все получает споткнулся это с .GreaterThan
, который сообщает об ошибке:
'DateTime' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'DateTime' could be found
Моего DateTime не обнуляемый, оба DateTimes требуют содержания. Когда я разрешаю Intellisense выявлять возможные варианты, что-либо после имени поля ограничено такими вещами, как .Date
и .Hour
, что также не работает. .Value
в этом списке не существует, .HasValue
.
Действительно смущен этот.
Кроме того, еще один вопрос: как мне сделать отдельные проверки на нескольких формах, которые существуют на одной странице? Сейчас у меня есть только одна форма, но модель формы вводится напрямую. Я не могу понять, как абстрагироваться от модели формы, чтобы я мог иметь более одной модели на странице. Никакие данные не приносятся в
Прямо сейчас я просто попытался изменить модели:.
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; }
}
с страницы ссылки @model CCS.Models.ReportViewModel
вместо @model CCS.Models.Report1ToExcelViewModel
, но я не могу показаться, чтобы получить страницу, чтобы тянуть в Report1ToExcelViewModel, чтобы поля формы распознавались. Прямо сейчас они ошибаются, потому что 'ReportViewModel' does not contain a definition for [fieldname]
, хотя я приношу Report1ToExcelViewModel
прямо в ReportViewModel
, как указано выше.
Просто используйте '. GreaterThan (x => x.Re port1ToExcelDateFrom) ' –
Он не проверяется правильно. Если у меня есть DateTo, который меньше, чем DateFrom, он не попадает. Вот почему я задаю вопрос о том, почему он не работает. Кроме того, все источники Google, которые я выяснил до конца 2015 года, и ссылка на MVC 5 используют атрибуты '.Value' и' .HasValue'. –
Не вижу в этом ничего неправильного кода при условии, что вы удаляете '.Value' –