Я использую этот объект:
[Required]
[Display(Name = "AuditDate", ResourceType = typeof(Resources.Audit))]
[DisplayFormat(DataFormatString = "{dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime dateAudit { get; set; }
В этой части моей формы:
@Html.TextBox("dateAudit", String.Format("{0:d}", Model.dateAudit.ToString("dd'/'MM'/'yyyy"), new { @class = "form-control" }))
Когда я пытаюсь ввести дату, я не могу отправить форму (появляется диалоговое окно DatePicker), потому что есть проблема с полем. Я добавил ValidationMessageFor в поле, которое говорит мне, что поле не содержит допустимую дату:
@Html.ValidationMessageFor(model => model.dateAudit, "", new { @class = "text-danger" })
Это сообщение об ошибке HTML, сгенерированное в этот момент для этого поля:
<input data-val="true" data-val-date="The field Date must be a date." data-val-required="The field Date is required." id="dateAudit" name="dateAudit" type="text" value="10/03/2015" class="hasDatepicker input-validation-error">
Я также попытался установить культуру для всех приложений в файле конфигурации:
<globalization uiCulture="fr-FR" culture="fr-FR" />
Если я выберу дату, например 1 марта, в формате 01/03/2015
, проблем не будет, и привязка модели распознает ее, но когда я выберу 20 марта, поле не пройдет проверку (я подозреваю, что оно думает, что я пытаюсь ввести 20 как месяц).
Я нашел эту библиотеку, которая может помочь с проверкой на стороне клиента, но похоже, что она несовместима с все браузеры, поэтому я не могу его использовать. Я рассматриваю возможность полного отказа от проверки на стороне клиента и проверки только поля даты в серверной части.
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ: я забыл посоветовать вам, что я использовал это переопределение jquery ui для datepicker:
/* French initialisation for the jQuery UI date picker plugin. */
/* Written by Keith Wood (kbwood{at}iinet.com.au),
Stéphane Nahmani ([email protected]),
Stéphane Raimbault <[email protected]> */
(function (factory) {
if (typeof define === "function" && define.amd) {
// AMD. Register as an anonymous module.
define(["../datepicker"], factory);
} else {
// Browser globals
factory(jQuery.datepicker);
}
}(function (datepicker) {
datepicker.regional['fr'] = {
closeText: 'Fermer',
prevText: 'Précédent',
nextText: 'Suivant',
currentText: 'Aujourd\'hui',
monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
monthNamesShort: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin',
'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
weekHeader: 'Sem.',
dateFormat: 'dd/mm/yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''
};
datepicker.setDefaults(datepicker.regional['fr']);
return datepicker.regional['fr'];
}));
new { @class = "form-control" }
внутри него? Я думаю, что это должно быть вне вызова метода формата. - person cbr   schedule 10.03.2015