Asp. Net MVC Проверка даты запуска, когда вход действителен - PullRequest
0 голосов
/ 31 января 2020

Я видел множество вопросов и ответов по этой проблеме, но я до сих пор не могу найти рабочее решение. У меня есть Bootstrap .Datepicker для ввода даты в формате dd/mm/yyyy. Я понимаю, что по некоторым причинам настройки глобализации являются американскими, например mm/dd/yyyy. Я сделал все, например, добавив lang="en" и установив локализацию в Web.config

<system.web>
    <globalization culture="en-GB" uiCulture="en-GB" enableClientBasedCulture="true" requestEncoding="utf-8" responseEncoding="utf-8" />
   ...
</system.web>

Для моей модели установлено следующее значение:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime RegistrationDate { get; set; }

Элемент модели моего вида выглядит примерно так , Я использую модель представления, потому что у меня есть две формы, и я хочу, чтобы они были проверены отдельно.

[Required]
[Display(Name = "Date Qualified as instructor")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime RegistrationDate { get; set; }

Входные данные в представлении:

<div class="form-group col-md-6">
   @Html.LabelFor(m => m.DrivingInstructor.RegistrationDate)
   @Html.TextBoxFor(m => m.DrivingInstructor.RegistrationDate,"{0:dd/mm/yyyy}", new { @class = "form-control datepicker", placeholder = "dd/mm/yyyy"})
   @Html.ValidationMessageFor(m => m.DrivingInstructor.RegistrationDate)
</div>

Наконец, здесь указатель даты и конфигурация проверки js:

 $(document).ready(function () {
            $(function () {
//validation
                $.validator.addMethod('date',
                    function (value, element) {
                        if (this.optional(element)) {
                            return true;
                        }
                        var ok = true;
                        try {
                            $.datepicker.parseDate('dd/mm/yyyy', value);
                        }
                        catch (err) {
                            ok = false;
                        }
                        return ok;
                    });
//datepicker configuration
                $('.datepicker').datepicker({
                    format: "dd/mm/yyyy",
                    startDate: "01/01/1940",
                    endDate: "today",
                    autoclose: true,
                    maxViewMode: 3,
                    todayHighlight: true
                });
            });
        });

Я нашел этот пост о исправлении проверки , но это еще больше усугубило проблемы. Поскольку до исправления я мог вводить даты, такие как 01.01.2020, и они не запускали проверку. При проверке, указанной выше, все введенные даты считаются недействительными. Есть хороший способ заставить его работать, или я должен просто удалить datepicket и использовать текстовое поле с регулярным выражением, настроенным для проверки dd/mm/yyyy?

...