MVC3 Десятичный знак, усеченный до 2 десятичных знаков при редактировании - PullRequest
26 голосов
/ 25 марта 2011

Я запускаю MVC3 с Razor и заметил, что десятичные значения усекаются до 2 десятичных разрядов в режиме редактирования. Мне удалось обойти это, пометив мою собственность с форматом отображения. Это не очень хорошее решение, так как мне придется помнить об этом при каждом новом генерируемом представлении (или обновлять мои шаблоны).

Я проверил значение, возвращаемое нашей службой контроллеру, и оно верное на 1.144, но когда привязано к представлению, оно выходит как 1.14 в TextBox

Свойство ViewModel

[Required]
[Display(Name = "Unit Price")]
public decimal UnitPrice { get; set; }

.cshtml Код

@Html.LabelFor(model => model.UnitPrice) 
@Html.EditorFor(model => model.UnitPrice) 
@Html.ValidationMessageFor(model => model.UnitPrice)

Если я украсил свойство следующим, то это сработает.

[DisplayFormat(
               ApplyFormatInEditMode = true, 
               DataFormatString = "{0:0.00###########################}", 
               NullDisplayText = "")]

Есть идеи?

Ответы [ 3 ]

32 голосов
/ 25 марта 2011

Вот как определяется шаблон по умолчанию Десятичный редактор :

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">
    private object ModelValue {
        get {
            if (ViewData.TemplateInfo.FormattedModelValue == ViewData.ModelMetadata.Model) {
                return String.Format(
                    System.Globalization.CultureInfo.CurrentCulture,
                    "{0:0.00}", ViewData.ModelMetadata.Model
                );
            }
            return ViewData.TemplateInfo.FormattedModelValue;
        }
    }
</script>
<%= Html.TextBox("", ModelValue, new { @class = "text-box single-line" }) %>

Обратите внимание на формат {0:0.00}.

Таким образом, у вас есть две возможности:

  1. Используйте double вместо decimal как тип в вашей модели
  2. Измените шаблон редактора по умолчанию, создав пользовательский ~/Views/Shared/EditorTemplates/Decimal.cshtml, который может выглядеть просто так:

    @Html.TextBox(
        "", 
        ViewData.TemplateInfo.FormattedModelValue, 
        new { @class = "text-box single-line" }
    )
    

Возможно, вы также захотите изменить шаблон отображения.

9 голосов
/ 09 января 2012

Если вам не нужна функциональность HtmlHelper 'EditorFor', вы можете просто заменить его на 'TextBoxFor', и он не должен усекать ваше десятичное значение ...

6 голосов
/ 11 августа 2016

ИМО, эта статья имеет лучший вариант:

HTML-editorfor-с-3-десятичное место

Я использовал этот код для отображения до 4 десятичных цифр в моем EditFor:

    [Display(Name = "Discount Percentage")]
    [Range(0, 100.0)]
    [DisplayFormat(DataFormatString="{0:0.0000}", ApplyFormatInEditMode=true)]
    public Decimal? DiscountPercent { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...