У меня есть простое приложение mvc asp.net core 2.0. В модели данных у меня есть десятичное число, которое я отформатировал до двух десятичных чисел, используя аннотации данных:
[DisplayFormat(DataFormatString = "N2")]
public decimal MyValue { get; set; }
Модель передается в представление контроллером и отображается в представлении с помощью этого кода:
@model MyModel
<p>@Model.MyValue</p>
Это работает нормально, и значение отображается с двумя десятичными знаками, когда я впервые просматриваю страницу. Но когда я нажимаю кнопку «Обновить» в браузере, отображается только один десятичный знак.
Я наблюдаю такое же поведение при тестировании на своем ПК и при работе в Azure с браузерами Chrome или Edge.
Интересно, что если я просматриваю исходный код страницы, в HTML есть два десятичных знака.
Что я здесь делаю не так?
Создавая мини-решение для репликации и обмена, я понял, что форматирование вообще не работает. Что-то еще делает этот исходный формат. В пустом проекте номер не форматируется в представлении. Мне нужно использовать форматирование в представлении, чтобы получить 2 десятичных знака: @ ($ "{Model.MyValue: N2}"). Значит, форматирование аннотаций данных не работает. Может, мне нужно задать новый вопрос?
Что ж, форматирование не будет работать, если вы воспользуетесь приведенным выше кодом. Вам нужно использовать @Html.DisplayFor(m => m.MyValue)
Я думал, что в ядре asp.net это больше не нужно.
Возможно, вы запутались с компонентами представления? Приведенный выше код буквально выполнит ToString()
для значения и передаст его клиенту - атрибут DisplayFormat
будет проигнорирован.
Если в исходном коде 2 десятичных знака, на дисплее также будет два десятичных знака (если CSS не сделал что-то с этим). Нам нужно будет увидеть это в действии, я думаю, на первый взгляд это кажется невозможным.