我正在使用Razor运行MVC3并注意到在编辑模式下十进制值被截断为2位小数。我已经设法通过用显示格式注释我的属性来绕过它。这似乎不是一个非常好的解决方案,因为我必须记住为我生成的每个新视图(或更新我的模板)执行此操作。
我已经检查了我们的服务返回给控制器的值,它在1.144是正确的,但当绑定到视图时,它在TextBox中显示为1.14
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 = "")]
任何想法?
答案 0 :(得分:32)
这就是默认Decimal editor template is defined:
的方式<%@ 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" }
)
您可能也想修改显示模板。
答案 1 :(得分:9)
如果你不需要'EditorFor'HtmlHelper的功能,你可以简单地将它换成'TextBoxFor',它不应该截断你的十进制值......
答案 2 :(得分:6)
IMO,这篇文章有更好的选择:
html-editorfor-with-3-decimal-places
我使用此代码在EditFor中显示最多4位小数:
[Display(Name = "Discount Percentage")]
[Range(0, 100.0)]
[DisplayFormat(DataFormatString="{0:0.0000}", ApplyFormatInEditMode=true)]
public Decimal? DiscountPercent { get; set; }