Проверьте текстовое поле, чтобы принять только допустимое значение даты и времени, используя 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; }
Другие вопросы по тегам