【问题标题】:The field must be a number该字段必须是数字
【发布时间】:2015-08-07 13:34:00
【问题描述】:

我有这个字段:

public decimal Price { get; set; } 在数据库中是十进制 (7,2)。

查看:

 @Html.EditorFor(model => model.Price, 
                 new { htmlAttributes = new { @class = "form-control" } })

如果我用逗号输入值,MVC 默认验证不接受,表示:"The field must be a number"。 (我尝试使用正则表达式,但没有办法)

例如:5,00, 55,00 or 555,00

还有这个:

public DateTime date { get;set; }

查看:

 @Html.EditorFor(model => model.Date, 
                 new { htmlAttributes = new { @class = "form-control" } })

MVC 默认验证不接受 dd/mm/yyyy 格式的日期,仅接受 mm/dd/yyyy 格式的日期。

例如:13/02/2015, 15/06/2013, 25/08/2012

是全球化还是什么?我该如何解决这个问题?

【问题讨论】:

  • 有两个不同的问题,最好创建单独的问题。对于日期时间格式,您可以使用全球化设置并将线程更新为您想要的任何文化。对于第一个问题,您可以使用 Money 数据类型而不是 int
  • 你是从字符串分配的吗?我们可以看到您分配值的代码吗?
  • 这确实是一个全球化问题。您是否遇到了客户端验证、服务器端或两者兼有的问题?
  • 我编辑了我的问题,我只是用 EF 创建了一个项目 MVC 并生成控制器 + 视图,当我用逗号对一些值进行数字化时,它会发生或日期格式为 dd/mm/yyyy。 // 使用客户端。
  • 有解决办法吗?

标签: c# jquery datetime decimal globalization


【解决方案1】:

我找到的一个解决方案是覆盖 jquery.validate.js 的验证函数


<script>

    $.validator.methods.range = function (value, element, param) {
        var globalizedValue = value.replace(",", ".");
        return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
    }

    $.validator.methods.number = function (value, element) {
        return this.optional(element) || /-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
    }
    //Date dd/MM/yyyy
    $.validator.methods.date = function (value, element) {
        var date = value.split("/");
        return this.optional(element) || !/Invalid|NaN/.test(new Date(date[2], date[1], date[0]).toString());
    }
</script>

【讨论】:

  • 像魅力一样工作。
【解决方案2】:

您可能希望使用[DisplayFormat] 属性来装饰您的字段,如下所示:

[DisplayFormat(DataFormatString = "{0:N}", ApplyFormatInEditMode = true)]
public decimal Price { get; set; }

【讨论】:

    【解决方案3】:

    你可能会在这里找到你的答案error with decimal in mvc3 - the value is not valid for field,它对我不起作用,所以我暂时使用了这个

    <div class="col-md-10">
                @{ Html.EnableClientValidation(false); }
                @Html.EditorFor(model => model.DecimalValue, new { htmlAttributes = new { @class = "form-control" } })
                @{ Html.EnableClientValidation(true); }
                @Html.ValidationMessageFor(model => model.DecimalValue, "", new { @class = "text-danger" })
            </div>
    

    我在这里找到了这个ASP .NET MVC Disable Client Side Validation at Per-Field Level

    【讨论】:

      【解决方案4】:

      我有同样的问题,我曾经用全球化库 (globalize.js) 解决它,但他们改变了它,所以它不包含本地化文件。它应该从 cldr 库中获取它们,但我还没有弄清楚如何。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        • 1970-01-01
        相关资源
        最近更新 更多