我正在使用Razor运行MVC3,并注意到在编辑模式时,十进制值被截断为2位小数。我已经设法通过使用显示格式注释我的属性来绕过它。这似乎不是一个很好的解决方案,因为我必须记住为每个生成的新视图(或更新我的模板)这样做。
我检查了我们的服务返回给控制器的值,它在1.144是正确的,但是当绑定到视图它出来作为1.14在TextBox
[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 = "")]
有任何想法吗?
解决方法
这就是默认的
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" } )