Защо 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