asp.net-mvc如何在 Razor 视图中正确发表一个十进制值?

标签: Asp.net-MVC Razor C#
发布时间: 2016/10/9 6:16:34
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个 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视图︰

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

问题是 SizeUS 值获取四舍五入到 1/100 时过帐到控制器。 我想能够达到 1/1000 或也许 1/10000th 发布的一个值。 我怎么会这样呢?

解决方法 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 位数的十进制值默认情况下,因为大多数用户会使用十进制值来代表货币。请注意它才会这么做,是否你没有应用的格式字符串 (即,如果检查的目的声明)。 < %= Html.Encode(FormattedValue) %>

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

您可以使用 double 相反,创建您自己的编辑器模板,或简单地写出一个 HTML input 控制。

赞助商