Подтвердить DateFormat в Mvc

У меня есть свойство ExpiredDate define в MVC

[Required]
        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
        public DateTime? ExpirationDate { get; set; }

Я хочу проверить, нет ли даты на странице в неправильном формате. Формат даты, которую я использую, - MM/dd/yyyy.

Ответ 1

Вы должны включить атрибут DataType с DataType.Date. Они могут быть найдены в пространстве имен System.ComponentModel.DataAnnotations.

[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? ExpirationDate { get; set; }

Этот ответ также содержит еще несколько атрибутов.

Обновлено, чтобы включить инструкции для включения проверки на стороне клиента в ASP.NET MVC4

Чтобы включить проверку на стороне клиента, вам необходимо:

  • Добавьте плагин jquery.validation в нижний колонтитул

    <%: Scripts.Render("~/Scripts/jquery.validate.min.js") %>
    <%: Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") %>
    
  • Добавьте это в web.config

    <appSettings>
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    
  • Используйте этот css при использовании @Html.ValidationMessageFor(), чтобы он был скрытно скрыт и отображался с помощью проверки javascript

    <style type="text/css">
    
    /* styles for validation helpers */
    .field-validation-error {
        color: #e80c20;
        font-weight: bold;
    }
    
    .field-validation-valid {
        display: none;
    }
    
    input.input-validation-error {
        border: 1px solid #e80c20;
    }
    
    input[type="checkbox"].input-validation-error {
        border: 0 none;
    }
    
    .validation-summary-errors {
        color: #e80c20;
        font-weight: bold;
        font-size: 1.1em;
    }
    
    .validation-summary-valid {
        display: none;
    }
    
    </style>
    

Ответ 2

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

Проблемы с проверкой клиента могут возникать из-за ошибки MVC (даже в MVC 5) в jquery.validate.unobtrusive.min.js, которая не принимает формат даты/даты.. Это не вызвано datepicker или браузерами. К сожалению, вы должны решить это вручную.

Мое окончательное решение:

Вы должны включить это раньше:

@Scripts.Render("~/Scripts/jquery-3.1.1.js")
@Scripts.Render("~/Scripts/jquery.validate.min.js")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
@Scripts.Render("~/Scripts/moment.js")

Вы можете установить moment.js, используя:

Install-Package Moment.js

И тогда вы можете, наконец, добавить исправление для синтаксиса формата даты:

$(function () {
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
    }
});

Ответ 3

Вы можете использовать проверку, например:

[Required]
        [DisplayFormat(DataFormatString = "{0:d}")]
        public DateTime? ExpirationDate { get; set; }

Я думаю, что это сработает