0

Попытка использования 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, как указано выше.

+0

Просто используйте '. GreaterThan (x => x.Re port1ToExcelDateFrom) ' –

+0

Он не проверяется правильно. Если у меня есть DateTo, который меньше, чем DateFrom, он не попадает. Вот почему я задаю вопрос о том, почему он не работает. Кроме того, все источники Google, которые я выяснил до конца 2015 года, и ссылка на MVC 5 используют атрибуты '.Value' и' .HasValue'. –

+0

Не вижу в этом ничего неправильного кода при условии, что вы удаляете '.Value' –

ответ

1

Использование

.GreaterThan(x => x.Report1ToExcelDateFrom) 

вместо

.GreaterThan(x => x.Report1ToExcelDateFrom.Value) 

после вашей модели Report1ToExcelDateFrom не обнуляемым Datetime

public DateTime ? Report1ToExcelDateFrom { get; set; } 

работал бы отлично

 Смежные вопросы

  • Нет связанных вопросов^_^