Почему бритва автоматически округляет до десятичного знака до 2 десятичных знаков?

2

Это поле, которое у меня есть в моей модели просмотра:

public decimal MyValue { get; set; }

Вот как я показываю значение в представлении:

@Html.EditorFor(model => model.MyValue)

Я отлаживал все пути от БД и отключил все JS. Я все еще получаю, что эта модель в представлении имеет значение 12.34345, но конечное значение, которое предоставляется пользователю, составляет 12.34.

Этот вопрос спрашивает, КАК это решить, но ПОЧЕМУ осталось неясным.

Интересно, когда я использую:

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

округления не происходит.

Теги:
razor
asp.net-mvc
decimal
rounding

2 ответа

1
Лучший ответ

Это функция по умолчанию EditorTemplate для decimal. Сформируйте исходный код (обратите внимание, что формат "{0:0.00}")

internal static string DecimalTemplate(HtmlHelper html)
{
    if (html.ViewContext.ViewData.TemplateInfo.FormattedModelValue == html.ViewContext.ViewData.ModelMetadata.Model)
    {
        html.ViewContext.ViewData.TemplateInfo.FormattedModelValue = String.Format(CultureInfo.CurrentCulture, "{0:0.00}", html.ViewContext.ViewData.ModelMetadata.Model);
    }
    return StringTemplate(html);
}

Если вы хотите отображать десятичные @Html.TextBoxFor(m => m.MyValue) как сохраненные, используйте @Html.TextBoxFor(m => m.MyValue), или вы можете применить свой собственный формат, используя DisplayFormatAttribute, который будет соблюдаться методом EditorFor(), например

[DisplayFormat(DataFormatString = "{0:0.00000}", ApplyFormatInEditMode = true)]'
public decimal MyValue { get; set; }
  • 2
    [DisplayFormat(DataFormatString = "{0:F5}", ApplyFormatInEditMode = true)] также применимо.
0

Пожалуйста, посмотрите ниже исходный код https://github.com/aspnet/Mvc/blob/6436538068d19c475d5f7c9ce3d0080d2314f69d/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/DefaultEditorTemplates.cs

см. ниже метод

public static IHtmlContent DecimalTemplate(IHtmlHelper htmlHelper)
{
        if (htmlHelper.ViewData.TemplateInfo.FormattedModelValue == htmlHelper.ViewData.Model)
        {
            htmlHelper.ViewData.TemplateInfo.FormattedModelValue =
                string.Format(CultureInfo.CurrentCulture, "{0:0.00}", htmlHelper.ViewData.Model);
        }

        return StringTemplate(htmlHelper);
}
  • 1
    Вопрос помечен для asp.net-mvc не для asp.net-core
  • 0
    Спасибо за комментарий, но я действительно не вижу различий между ними.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню