Должен ли HiddenFor уважать DisplayFormat? - PullRequest
2 голосов
/ 03 апреля 2012

В ASP.NET MVC 4 Beta у меня есть объект со следующим свойством:

[DisplayFormat(DataFormatString = "{0:o}", ApplyFormatInEditMode = true)]
public virtual DateTime SavedAt { get; set; }

В представлении, созданном с помощью «Контроллера с действиями и представлениями чтения / записи, с использованием шаблона EntityFramework»,У меня есть этот код для создания редактора для него:

<div class="editor-label">
    @Html.LabelFor(model => model.SavedAt)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.SavedAt)
    @Html.ValidationMessageFor(model => model.SavedAt)
</div>

, который производит этот вывод:

<div class="editor-label">
    <label for="SavedAt">SavedAt</label>
</div>
<div class="editor-field">
    <input class="text-box single-line" data-val="true" data-val-date="The field SavedAt must be a date." data-val-required="The SavedAt field is required." id="SavedAt" name="SavedAt" type="text" value="2012-03-31T22:45:18.2244059" />
    <span class="field-validation-valid" data-valmsg-for="SavedAt" data-valmsg-replace="true"></span>
</div>

Обратите внимание, что дата отформатирована как "2012-03-31T22: 45:18.2244059 ".

Если я заменю фрагмент кода вида следующим:

@Html.HiddenFor(model => model.SavedAt)

Этот код сгенерирован:

<input data-val="true" data-val-date="The field SavedAt must be a date." data-val-required="The SavedAt field is required." id="SavedAt" name="SavedAt" type="hidden" value="31/03/2012 22:45:18" />

Обратите внимание, что дата теперь отформатирована как"31/03/2012 22:45:18".

Вопрос:

Ожидается ли HiddenFor форматирование, определенное атрибутом DisplayFormat?

Если нет, что было бы хорошей альтернативой для вывода скрытого поля в нужном формате?

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

Ожидается ли, что HiddenFor выполнит форматирование, определенное атрибутом DisplayFormat?

Нет, это не так.Только помощники EditorFor и DisplayFor используют DisplayFormat.

Если нет, то что может быть хорошей альтернативой для вывода скрытого поля в нужном формате?

Вы не должныдействительно не заботится о формате скрытого поля.Это скрыто, никто не видит это.Но если по какой-то причине вам нужен пользовательский формат, вы можете переопределить шаблон по умолчанию с помощью пользовательского шаблона редактора (~/Views/Shared/EditorTemplates/HiddenInput.cshtml):

@if (!ViewData.ModelMetadata.HideSurroundingHtml)
{
    @Html.Encode(ViewData.TemplateInfo.FormattedModelValue)
}
@Html.Hidden("", ViewData.TemplateInfo.FormattedModelValue)

, а затем украсить свойство модели представления с атрибутом [HiddenInput], чтобыукажите, что вы хотите, чтобы это отображалось как скрытое поле:

[DisplayFormat(DataFormatString = "{0:o}", ApplyFormatInEditMode = true)]
[HiddenInput(DisplayValue = false)]
public virtual DateTime SavedAt { get; set; }

И наконец:

@Html.EditorFor(x => x.SavedAt)
1 голос
/ 17 августа 2012

Я обнаружил проблему, используя @Html.HiddenFor(model => model.SavedAt), это избавит вас от необходимости выполнять обратную передачу.

Чтобы избежать потери значения Date, я использую TempData, затем я переназначил значение модели на[HttpPost]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...