Я создаю свое первое приложение, но сейчас я застрял на том, как Chrome обрабатывает даты (в сочетании с IE).
У меня есть модель с полем:
[Display(Name = "AcceptanceDate", ResourceType = typeof(Resources.ModelResources))]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
public DateTime? AcceptanceDate { get; set; }
Я использую это поле в виде.
@if (Request.UserAgent.ToLower().IndexOf("chrome") > -1)
{
@Html.EditorFor(m => m.AcceptanceDate, ViewBag.disableControls == true ? (object)new { disabled = "disabled", @class = "form-control" } : new { @class = "form-control", @type = "date" })
}
else
{
@Html.EditorFor(m => m.AcceptanceDate, ViewBag.disableControls == true ? (object)new { disabled = "disabled", @class = "form-control", @Value = Model.AcceptanceDate.HasValue ? Model.AcceptanceDate.Value.ToString("dd-MM-yyyy") : null } : new { @class = "form-control", @type = "date", @Value = Model.AcceptanceDate.HasValue ? Model.AcceptanceDate.Value.ToString("dd-MM-yyyy") : null })
}
И поместите указатель даты в поле со следующим кодом:
<!-- jQueryUI Stylesheet (from CDN) -->
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/smoothness/jquery-ui.min.css" rel="stylesheet" type="text/css" />
<script type='text/javascript'>
$.datepicker.regional['nl'] = {
monthNames: [
'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober',
'November', 'December'
],
monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
dayNames: ['Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag', 'Zondag'],
dayNamesShort: ['Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za', 'Zo'],
dayNamesMin: ['Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za', 'Zo']
}
$.datepicker.setDefaults($.datepicker.regional['nl']);
$(function () {
$("input[type='date']").datepicker({
dateFormat: 'dd-mm-yy',
showButtonPanel: false
}).attr('type', 'text');
});
</script>
Формат даты установлен на dd-MM-гггг. Когда я вызываю представление в Internet Explorer, все отлично работает. Значение извлекается из базы данных и отображается в ожидаемом виде (ДД-ММ-ГГГГ), средство выбора даты работает как символ (выбранная дата также отображается как ДД-ММ-ГГГГ), и сохранение данных также работает.
Но когда я использую chrome, начальное значение поля (при загрузке представления) отображается как ГГГГ-ММ-ДД. Средство выбора даты работает, и после выбора другой даты дата выбирается как ДД-ММ-ГГГГ.
Может кто-нибудь подсказать, почему хром показывает начальное значение в виде ГГГГ-ММ-ДД ??
Я попытался изменить код для EditorFor в представлении следующего кода:
@Html.EditorFor(m => m.AcceptanceDate, ViewBag.disableControls == true ? (object)new { disabled = "disabled", @class = "form-control", @Value = Model.AcceptanceDate.HasValue ? Model.AcceptanceDate.Value.ToString("dd-MM-yyyy") : null } : new { @class = "form-control", @type = "date", @Value = Model.AcceptanceDate.HasValue ? Model.AcceptanceDate.Value.ToString("dd-MM-yyyy") : null })
Но это привело к тому, что в текстовых полях не отображалось значение. (значение было отправлено в представление, но не отображено в элементах управления.
Пожалуйста, avise.