DisplayFormat не применяется к десятичному значению

У меня есть свойство модели, которое я пытаюсь отобразить с помощью шаблона EditorFor, и я пытаюсь применить форматирование с помощью атрибута DisplayFormat. Однако он вообще не работает — его полностью игнорируют.

Вот мой шаблон:

@model System.Decimal?
@Html.TextBoxFor(m => m)

Вот моя модель:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:0.00}")]
public decimal? Retail { get; set; }

Вот мой взгляд:

@Html.EditorFor(m => m.Retail)

Но он отображает текстовое поле со следующим значением:

189.9900

Это кажется довольно простым, но это не работает, и я понятия не имею, почему.

ОБНОВЛЕНИЕ: Ради интереса я попробовал это с шаблоном DisplayFor, и это сработало:

@Html.DisplayFor(m => m.Retail)

Так почему же шаблон DisplayFor будет работать, но не шаблон EditorFor, если я установил ApplyFormatInEditMode в значение true?

ОБНОВЛЕНИЕ 2: Неважно, причина, по которой это сработало, заключается в том, что мой шаблон отображения Decimal был жестко запрограммирован для такого форматирования. Так что мой шаблон отображения тоже не работает.


person Jerad Rose    schedule 20.10.2011    source источник
comment
Вы пробовали @Html.EditorForModel() в своем шаблоне?   -  person Jon    schedule 21.10.2011
comment
Да, это только полностью удалило текстовое поле.   -  person Jerad Rose    schedule 21.10.2011


Ответы (3)


Дарин Димитров опубликовал этот ответ, и я смог чтобы заставить его работать, используя его решение:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue)

Немного грубо, ИМО, что это не работает с TextBoxFor, но, по крайней мере, это работает.

person Jerad Rose    schedule 20.10.2011

DisplayFormat так работать не будет; если вы вручную создаете текстовое поле для свойства, оно не вступает в игру. Это сработает, только если вы

@model System.Decimal?
@Html.DisplayFor(m => m)
person Jon    schedule 20.10.2011
comment
Так это не работает с EditorFor? Я думал, что в этом смысл ApplyFormatInEditMode? - person Jerad Rose; 21.10.2011

Попробуйте с этим форматом, он выводит 18.999,00

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:N}")]
person wnascimento    schedule 20.10.2011
comment
Нет, это все еще не работает для меня. Он по-прежнему отображает 1899.9900. - person Jerad Rose; 21.10.2011
comment
Вы должны использовать шаблон EditorFor по умолчанию, тогда как я использую собственный шаблон. Шаблоны по умолчанию у меня работают нормально, а пользовательские шаблоны не работают, так как в конечном итоге они должны использовать TextBoxFor. Итак, мой ответ выше и вопрос, с которым я связан. - person Jerad Rose; 21.10.2011
comment
как говорит @jer, он работает в EditorFor, но не в TextBoxFor - person Dr Blowhard; 30.04.2015