Диапазоны аннотаций данных полей даты и времени Великобритании - PullRequest
3 голосов
/ 12 февраля 2010

Я хочу использовать аннотации данных для проверки полей DateTime, но у меня возникают проблемы. Согласно документации на MSDN (http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.rangeattribute.aspx), следующее должно выполнить работу

[Range(typeof(DateTime), "1/2/2004", "3/4/2004",
    ErrorMessage = "Value for {0} must be between {1} and {2}")]

Однако, это помечает любую дату, которую я считаю недействительной!

Сначала я думал, что это не сбор дат Великобритании (когда я пытался 26/2/2004), но я даже не могу заставить его использовать даты, такие как 2/2/2004.

Я использую аннотации данных в MVC2 и использую инфраструктуру MicrosoftAjax для проверки на стороне клиента.

Есть предложения?

Спасибо

Ответы [ 2 ]

2 голосов
/ 03 сентября 2013

Прошло несколько лет, и я снова обратился к той же проблеме с MVC4, и я могу сказать, что она, очевидно, была решена.

Я создал очень простой сайт MVC4 по умолчанию и дал члену даты следующие атрибуты

    [Required]
    [DataType(DataType.Date)]
    [Range(typeof(DateTime), "1/2/2004", "3/4/2004", ErrorMessage = "Value for {0} must be between {1} and {2}")]
    public DateTime BlogDate { get; set; }

Проверка теперь отлично работает в британской системе данных, запрещая дату 1/2/2004, разрешающую дату 4/3/2004 или 26/3/2004.

Шаблон, который я использовал, использовал преимущества кода EF4, но у меня нет никаких оснований подозревать, что он вообще не был исправлен, поскольку javascript также работает правильно.

Так что, если вы используете MVC2, это все еще может быть проблемой, но лучшее решение, которое я нашел, это использовать MVC4, пока он доступен вам.

1 голос
/ 12 февраля 2010

Насколько я знаю, RangeAttribute может проверять число только на стороне клиента, вам придется написать собственный валидатор JavaScript, чтобы это работало ...

проверьте http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx для примера, как это сделать.

...