【问题标题】:How to format numbers in C# MVC 4 to reflect a two decimal point currency?如何格式化 C# MVC 4 中的数字以反映两位小数点货币?
【发布时间】:2014-06-26 16:34:34
【问题描述】:

因此,我希望小数点后面的数字作为输入比我想要的更多。

我正在使用这个模型:

public class Movie
{
    public int ID { get; set; }
    public string Title { get; set; }
    public DateTime ReleaseDate { get; set; }
    public string Genre { get; set; }
    [DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
    public decimal Price { get; set; }
}

这是我的看法:

    <div class="editor-label">
        @Html.LabelFor(model => model.Price)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model =>  model.Price)
        @Html.ValidationMessageFor(model => model.Price)
    </div>

似乎只是将 DisplayFormat 属性添加到 Movie.Price 不足以让用户输入像 2,79 这样的数字,如果他们尝试他们会收到验证错误。 @Html.EditorFor(model => model.Price) 创建的输入字段要求数字为 2,790(请注意小数点后面添加的额外 0)。

我尝试了各种 DataFormatStrings 但都没有效果,我错过/不理解什么?

如何调整我的代码,以便用户能够输入 2,79 而不是 2,790 作为有效输入?

【问题讨论】:

  • 绝对确定服务器使用的是正确的文化吗?看起来它试图将, 解释为千位分隔符而不是小数点。验证错误也是发生在客户端还是服务器端?
  • @Ic 不,我不是,我将如何改变文化,顺便说一句,这对我来说是一个新概念。我想它发生在客户端,因为验证错误部分发生在浏览器中..
  • 客户端验证可能更困难,但您可以开始查看验证规则(如果您使用不显眼的验证,则输入元素的属性)和相关的 JavaScript。至于服务器端,你可以globally set a value in web.config,或者如果你想动态地或每页地在控制器中设置Thread.CurrentThread.CurrentUICulture /Thread.CurrentThread.CurrentCulture。不过,有人可能会提供更完整的答案。
  • @Ic 我认为文化与特定于文化的设置有关,这当然可以解决问题。但是我不需要将输入解释为货币本身,我需要将其解释为小数点后有两个数字的数字。
  • 是的,但这里的问题在于默认区域性,小数点是. 而不是,(即1234 + 56/100 表示为1,234.56 而不是1.234,56)。您需要设置正确的文化,以便在您的格式中正确解析。

标签: c# asp.net-mvc formatting


【解决方案1】:

这里的问题是服务器 - 很可能也是客户端验证脚本 - 将逗号 (,) 解析为不是小数分隔符,而是千位分隔符。这是因为,在默认区域性中,小数点为 .。所以 1234 + 56/100 “通常”表示为 1,234.56 而不是 1.234,56

您需要设置正确的文化,以便在您的格式中正确解析。通过globally setting a value in web.config 或手动设置Thread.CurrentThread.CurrentUICulture / Thread.CurrentThread.CurrentCulture 如果您需要更细粒度的控制,请从控制器执行此操作。

这也很可能冒泡到客户端验证,因此您需要确保编写正确的 JavaScript 验证规则以及覆盖默认规则。


作为旁注,您可能需要做一些事情来向您的用户指明期望的格式。来自世界其他地方的人们以不同的方式书写数字,并且可能期望事物采用其原生格式。 (但有时页面的语言很好地暗示了预期的数字/日期格式。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 2020-10-25
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2015-10-08
    相关资源
    最近更新 更多