ASP.NET MVC 3 Дата привязки и проверки для элемента управления текстового поля HTML

У меня есть SmallDateTime поле в моей базе данных Sql Server 2008 для хранения дней рождения пользователей.

На моей веб-странице "Изменить профиль" у меня есть стандарт textbox с которой я хочу связать дату "дня рождения" (исключая время, поскольку это не требуется). В настоящее время я привязываюсь к текстовому полю, но он отображает полную дату и время.

Кроме того, когда пользователь обновляет свой профиль, я хочу иметь возможность проверить текстовое поле "День рождения", убедившись, что указанное значение соответствует dd/mm/yyyyи любые отклонения от этого выделены в моем существующем резюме проверки на странице.

Как мне поступить:

а) настройка свойства Birthday в моей ViewModel для отображения в dd/mm/yyyy формат (без учета времени).

б) подтвердить день рождения (на основе dd/mm/yyyy формат) когда пользователь отправляет форму?

3 ответа

Решение
[DisplayFormat(DataFormatString="{0:dd/MM/yyyy}", ApplyFormatInEditMode=true)]
public DateTime DateOfBirth { get; set; }

Это должно дать вам автоматическое форматирование на поле (без необходимости делать это вручную), а также проверку.

Я обычно использую строковое свойство в паре с объектом DateTime, что-то вроде

public string MyDateStr 
{
   get 
   {
       return MyDateDate == null ? "" : MyDateDate.ToShortDateString();
   }
   set
   {
      // Usually a tryParse for the string value
   }
}

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

НТН

М.

РЕДАКТИРОВАТЬ: для проверки материала см. Это: другой вопрос о SO

А) вы можете использовать.ToShortDateString для отображения даты и времени без времени. Формат по-прежнему зависит от глобализации по умолчанию.

б) для проверки вы можете сделать это с помощью аннотаций данных в вашей модели, например:

[DataType(DataType.DateTime, ErrorMessage = "Please enter a valid date in the format dd/mm/yyyy")]
public DateTime Birthday { get; set; }
Другие вопросы по тегам