Почему MVC FluentValidation InclusiveBetween всегда выдает ошибку с DateTime?

Если у меня есть свойство в модели представления, например:

 [DataType(DataType.DateTime)]
 public DateTime? MyDate{ get; set; }

И такое правило проверки:

public class YourDetailsViewModelValidator : AbstractValidator<YourDetailsViewModel>
{
    public YourDetailsViewModelValidator()
    {           
        RuleFor(x => x.MyDate)                
            .InclusiveBetween(startDate, endDate)
               .WithMessage("error");
    }                       
}

Почему ошибка возникает независимо от того, какая дата введена?

Я видел, что происходит нечто подобное введите здесь описание ссылки но в конечном итоге ответ был принят, поэтому я надеюсь, что его можно будет заставить работать правильно.


person davy    schedule 06.05.2015    source источник
comment
Говорили ли вы о сбоях на стороне клиента или на стороне сервера и проверяли ли правильность привязки значений?   -  person Evgeny Levin    schedule 06.05.2015
comment
это на стороне клиента. вроде все правильно завязано.   -  person davy    schedule 06.05.2015


Ответы (1)


Ошибка может быть объяснена разницей в форматировании даты jquery.validate плагина и форматировании помощников MVC. Просто посмотрите в html, сгенерированный вашим представлением, и используйте

[DisplayFormat(DataFormatString="...")] // format string instead of dots

чтобы атрибуты data-val-min и data-val-max соответствовали входному формату value (если они, конечно, не соответствуют).

Если формат значений и атрибутов валидации одинаковый, но валидация все равно не проходит, убедитесь, что jquery.validate имеет соответствующий формат. В этом случае вам следует изменить культуру приложения ASP.NET MVC, чтобы она соответствовала формату jquery.validate, или наоборот — изменить формат jquery.validate, чтобы он соответствовал приложению.

Подобные вопросы заданы на SO:

Первый

Второй

Параметры форматирования даты .NET доступны здесь.

person Evgeny Levin    schedule 07.05.2015