如何在Razor视图中正确发布小数值?

时间:2014-03-26 15:19:56

标签: c# asp.net-mvc razor

我有一个POCO模型如下:

public class Tool
{
    [Key]
    public int ID { get; set; }

    public int QtyOnHand { get; set; }


    [DisplayFormat(DataFormatString = "{0:#.####}")]
    public decimal SizeUS { get; set; }
    public string Location { get; set; }
    public int OriginalID { get; set; }


    [NotMapped]
    public bool Selected { get; set; }

    [NotMapped]
    public bool Selectable { get; set; }

}

在我的Razor View中,我有:

@Html.EditorFor(model => model.SizeUS)                    
@Html.ValidationMessageFor(model => model.SizeUS)

我遇到的问题是当发布到控制器时,SizeUS值会四舍五入到1/100。我希望能够发布最多1/1000或者1/10000的值。我该怎么做?

1 个答案:

答案 0 :(得分:1)

由于货币原因,decimal编辑器的定义方式如下:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">
    private object FormattedValue {
        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>
  

此模板默认显示精度为2位的十进制值,因为大多数用户将使用十进制值表示货币。请注意,只有在未应用格式字符串时才会执行此操作(这是在if语句中检查的目的)。       &lt;%= Html.Encode(FormattedValue)%&gt;

参考:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html

您可以使用double代替,创建自己的编辑器模板,或只是写出HTML input控件。