Форматировать текстовое поле после публикации игнорирует формат - PullRequest
0 голосов
/ 15 октября 2018

У меня есть свойство, которое мне нужно отобразить в редакторе

[Display(Name = "Created on")]
[UIHint("DateDisabled")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
public DateTime? CreationDate { get; set; }

Редактор шаблонов выглядит следующим образом

@model DateTime?

@{
   var culture = ...// retrieve culture;
}

@Html.TextBoxFor(m => m, "{0:"+ culture.DateTimeFormat.ShortDatePattern+"}",
   new { @class = "form-control", style = "width:100%", disabled = "disabled" })

И в представлении я использую что-то вроде этого

@Html.HiddenFor(m => m.CreationDate)
@Html.EditorFor(m => m.CreationDate)

Форма содержит другие поля.Когда редактор открыт, CreationDate выглядит нормально

<input name="CreationDate" id="CreationDate" type="hidden" value="10/12/2018 11:14:10 AM">
<input name="CreationDate" disabled="disabled" class="form-control" id="CreationDate" style="width: 100%;" type="text" value="10/12/2018">

Но если форма содержит неверное значение и сервер отправляет обратно

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Update(Model viewModel)
{
    if (!ModelState.IsValid)
    {
        return View("Edit", Model);
    }
    ...
}

, дата создания игнорирует формат и сгенерированный HTMLвыглядит так:

<input name="CreationDate" id="CreationDate" type="hidden" value="10/12/2018 11:14:10 AM">
<input name="CreationDate" disabled="disabled" class="form-control" id="CreationDate" style="width: 100%;" type="text" value="10/12/2018 11:14:10 AM">

Как вы можете видеть, формат был проигнорирован, и отображается полная дата и время.

Является ли эта функция дизайнерской?Что я могу сделать, чтобы повлиять на отображение даты после публикации с ошибками?

1 Ответ

0 голосов
/ 16 октября 2018

Для вашей проблемы, я предлагаю вам попробовать варианты ниже:

  1. Изменить модель следующим образом:

    [Display(Name = "Created on")]
    [UIHint("DateDisabled")]
    [DataType(DataType.Date)]
    //[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:dd\/MM\/yyyy}")]
    public DateTime? CreationDate { get; set; }
    
  2. Изменить вид как:

    @Html.TextBoxFor(model => model.CreationDate, @"{0:yyyy\/MM\/dd}", new { @class = "datepicker" })
    
...