последние дни Мне довольно сложно убедить проект MVC5 работать с датами, как я хотел бы. После интенсивного поиска в Интернете я пробовал многочисленные аттестаты, чтобы он работал нормально, но безуспешно.ASP.NET MVC5 хранит дату в неправильном формате
Вот проблема:
мне нужно для отображения и редактирования даты на веб-странице в формате ДД.ММ.ГГГГ (т.е. 15.07.2015). Для редактирования мне также нужно использовать jquery ui datepicker. Дело в том, что я смог успешно установить, что datepicker отображает дату в запрошенном формате, также проверка правильности jquery теперь корректно проверяет дату в данном формате. Так что для пользовательского интерфейса пока что так хорошо. Проблема появилась в момент, когда я нажал кнопку отправки - появилось сообщение об ошибке:
Значение «15 .07.2015» недействительно для начальной даты.
После непродолжительного расследования я обнаружил, что когда дата передается на сервер, он имеет формат переключения - вместо dd.MM.yyyy дата обрабатывается как MM.dd.yyyy. Другими словами, ошибка всплывает только тогда, когда на следующий день часть даты выше 12.
Вот некоторые моменты из моего кода:
В моей модели на сегодняшний день у меня есть это:
[Required]
[Display(Name = "Start Date")]
[DataType(DataType.Date)]
[UIHint("Date")]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
public DateTime DateStarts;
Я считаю, что все, что мне нужно сделать, чтобы сделать отображение даты в указанном формате, а также заставить пользователей заполнить текстовое поле датой в правильном формате.
Как указано в [UIHint («Дата»)], у меня есть собственный шаблон для рендеринга текстового поля для даты редактирования. Реализация этого шаблона заключается в следующем:
@model Nullable<DateTime>
@{
DateTime dt = DateTime.Now;
if (Model != null)
{
dt = (System.DateTime)Model;
}
@Html.TextBox("", dt.ToString("dd.MM.yyyy"), new { @class = "form-control datecontrol", type = "text", data_val_date = "Field must have format dd.MM.yyyy" })
<i class="fa fa-calendar form-control-feedback lowerzindex"></i>
}
JQuery DatePicker имеет следующие реализации:
$('.datecontrol').datepicker({
onClose: function() { $(this).valid(); },
minDate: "-1M",
dateFormat: "dd.mm.yy",
});
Так что даже DatePicker знает, как формат должен выглядеть.
Последний компонент является проверка на jquery.validation:
$.validator.addMethod(
'date',
function (value, element, params) {
if (this.optional(element)) {
return true;
};
var result = false;
try {
$.datepicker.parseDate('dd.mm.yy', value);
result = true;
} catch (err) {
result = false;
}
return result;
},
''
);
Я знаю, что дата передается на сервер в какой-то культуры нейтральном формате, но я подумал, что, когда я оформленный код на многих местах с запрошенный формат, это обеспечит правильное преобразование в нейтральный формат этой культуры. Или я пропустил что-то еще?
Благодаря
Что является культурой сервера? Является ли его формат даты dd/MM/yyyy? –
И вы можете удалить следующие '[DataType (DataType.Date)] и' ApplyFormatInEditMode = true' в '[DisplayFormat (DataFormatString =" {0: dd.MM.yyyy} ", ApplyFormatInEditMode = true)]' - оба из которых используются '@ Html.EditorFor()' для отображения браузера HTML5 datepicker, но вы используете плагин jquery, чтобы они ничего не делали. Затем вы также можете удалить свой шаблон и заменить его только '@ Html.TextBoxFor (m => m.DateStarts," {0: dd.MM.yyyy} ", новый {@class =" form-control datecontrol "}) ' –