Проверьте текстовое поле, чтобы принять только допустимое значение даты и времени, используя DataAnnotations в mvc3
Я хочу проверить текстовое поле, чтобы принять значение даты и времени, используя DataAnnotations в MVC3. Но я понятия не имею, как это сделать. Ниже приведено то, что я пытаюсь выполнить мое требование, и оно не работает.
[DataType(DataType.DateTime, ErrorMessage = "Invalid Datetime")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
[Display(Name = "Start Datetime")]
public DateTime? StartDateTime { get; set; }
Например, когда я нажимаю кнопку "Отправить" после заполнения поврежденных данных, первая проблема заключается в том, что форма получает сообщение, а затем отображается сообщение "Неверная дата", а во-вторых, если я ввожу только дату без времени, форма все еще получает сообщение, но на этот раз не показывает сообщение, которое также неправильно.
Поэтому я просто хочу узнать, как я могу проверить, чтобы мое текстовое поле принимало дату и время в формате "дд / мм / гггг ЧЧ: мм", используя только аннотации данных MVC.
2 ответа
1. Ваша проверка на стороне клиента не работает. Вы видите сообщение об ошибке после отправки формы - означает, что проверка на стороне клиента не работает должным образом. Чтобы проверка на стороне клиента работала, ASP.NET MVC предполагает, что у вас есть jquery.validate.js
а также jquery.validate.unobtrusive.js
ссылка на страницу. Вы можете загрузить их с помощью диспетчера пакетов NuGet в Visual Studio.
2. Поле даты не проверяется. Вы ожидаете DisplayFormat
чтобы подтвердить формат даты для вас. Но на самом деле это не так. Это больше о отображении вашей даты в представлении.
Чтобы проверить формат даты, вам нужно использовать свой собственный Attribute
, Или вы можете просто использовать RegularExpression
приписывать. Самый простой пример выглядит так:
[RegularExpression(@"\d{1,2}/\d{1,2}/\d{2,4}\s\d{1,2}:\d{1,2}", ErrorMessage = "")]
Или, если вы хотите создать собственный атрибут, то:
public class DateFormatValidation : ValidationAttribute{
protected override bool IsValid(object value){
DateTime date;
var format = "0:dd/MM/yyyy HH:mm"
bool parsed = DateTime.TryParseExact((string)value, format, System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out date)
if(!parsed)
return false;
return true;
}
}
Тогда используйте это как:
[DataType(DataType.DateTime, ErrorMessage = "Invalid Datetime")]
[DateFormatValidation]
[Display(Name = "Start Datetime")]
public DateTime? StartDateTime { get; set; }
Я получил его с сайта diff, сказав, что это проблема в chrome, и он исправил это, применив этот код. Поэтому сначала проверьте, работает ли он в Firefox, тогда вы можете быть вынуждены применить этот код, однако этот код пропускает проверку формата даты.
$.validator.methods["date"] = function (value, element) { return true; }