Это должно быть довольно просто, так как я думаю, что это должно быть очень распространенной проблемой, и я, вероятно, не первый разработчик ASP.NET MVC, столкнувшийся с этим.
Я использую ASP.NET MVC Client /Проверка сервера с использованием аннотаций данных и jquery.validate.
У меня есть модель представления со свойством DateTime
:
public DateTime SomeDate { get; set; }
В представлении у меня есть форма со свойством:
@Html.TextBoxFor(vm => vm.SomeDate)
Несмотря на то, что в модели представления нет явной аннотации к свойству, jquery.validate требует, чтобы оно было обязательным (так как это тип, не допускающий значения NULL), а также допустимой датой.
У меня нет проблем с необходимым полем (на самом деле, это действительно так), хотя я знаю, что могу избежать этого, сделав свойство обнуляемым.Проблема в том, что я использую формат даты моей культуры (dd/MM/yyyy
), но поскольку jquery.validate пытается вызвать:
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());
}
, он считает ее недопустимой датой и жалуется (т. Е. «Date (»)25/12/2018 ") недействительно"), поэтому он не позволяет отправить форму.
Я пытался использовать:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
в моей собственности, но это неКажется, что это никак не влияет на саму проверку.
Я мог бы использовать строковое свойство вместо DateTime
и создать свою собственную пользовательскую проверку (клиент и сервер), но так как это свойство на самом делеDateTime
, мне кажется, что это должен быть какой-то способ использования стандартной проверки ASP.NET MVC без необходимости использования DateTime
на всех моих моделях представления.На самом деле мне даже не нужна проверка для моего DateTime
, потому что пользователю предлагается средство выбора даты, но я хочу иметь возможность использовать проверку клиента для других свойств, и как только я включу сценарии jquery.validation,проверка даты добавляется автоматически, вызывая эту проблему.
Итак, я ищу способ:
- Использовать свойство
Datetime
в моих классах модели представления и показатьэто в представлении в формате dd/MM/yyyy
- Использовать проверку клиента для других свойств (необязательно для
DateTime
), то есть возможность использовать проверку клиента по крайней мере в других свойствах (если не для DateTime
properties)
Лучшим решением было бы, если есть способ (должен быть?) Сообщить jquery.validate формат даты, в котором он должен проверять даты.
Вторым лучшим вариантом будет способ по крайней мере отключить проверки даты на стороне клиента, не отключая проверку клиента вообще и не отказываясь от использования DateTime
в моей модели представления.В крайнем случае следует использовать строки вместо DateTime
и создать собственную проверку, но я думаю, что это излишне.
Я думаю, что любой разработчик, не использующий стандартный формат синтаксического анализа даты в javascript, должен был столкнуться с этой проблемой, ноЯ не нахожу способ решить проблему без использования обходных путей, которые, честно говоря, не должны быть необходимыми для такой распространенной и простой ситуации.