MVC3 Десятичное усечение до 2 знаков после запятой при редактировании
Я запускаю 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 = "")]
Любые идеи?
Ответы
Ответ 1
То, как определено десятичный шаблон редактора:
<%@ 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}
.
Итак, у вас есть две возможности:
- Используйте
double
вместо decimal
как тип вашей модели.
-
Измените шаблон редактора по умолчанию, создав пользовательский ~/Views/Shared/EditorTemplates/Decimal.cshtml
, который может выглядеть примерно так:
@Html.TextBox(
"",
ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line" }
)
Возможно, вам захочется также изменить шаблон отображения.
Ответ 2
Если вам не нужны функции "EditorFor" HtmlHelper, вы можете просто заменить его на "TextBoxFor" и не урезать свое десятичное значение...
Ответ 3
IMO, эта статья имеет лучший вариант:
html-editorfor-with-3-decimal-places
Я использовал этот код для отображения до 4 десятичных цифр в моей EditFor:
[Display(Name = "Discount Percentage")]
[Range(0, 100.0)]
[DisplayFormat(DataFormatString="{0:0.0000}", ApplyFormatInEditMode=true)]
public Decimal? DiscountPercent { get; set; }