The field must be a number

血红的双手。 提交于 2019-12-12 08:31:14

问题


I have this field:

public decimal Price { get; set; } in Database it is decimal (7,2).

View:

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

If i put a value with comma, MVC default validation doesn't accept, says: "The field must be a number". (I tried use a Regex, but no way)

For example: 5,00, 55,00 or 555,00

Also this:

public DateTime date { get;set; }

View:

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

MVC default validation doesn't accept dates in format dd/mm/yyyy, only in mm/dd/yyyy.

For example: 13/02/2015, 15/06/2013, 25/08/2012

Is something with globalization or what? How can I solve this?


回答1:


One solution I found was to override the validation functions of 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:


You must mark your property with [DataType(DataType.Currency)].

[DataType(DataType.Currency)]
public decimal Price { get;set;}



回答3:


You might find your answer here error with decimal in mvc3 - the value is not valid for field , it didn't work for me so i used this temporary

<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>

and i find this here ASP .NET MVC Disable Client Side Validation at Per-Field Level




回答4:


You may want to decorate your field with the [DisplayFormat] attribute as bellow:

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



回答5:


I have the same issue, I used to solve it with the globalisation library (globalize.js) but they changed it so it doesn't include the localisation files. It is supposed to get them from the cldr library, but I haven't figured out how.



来源:https://stackoverflow.com/questions/30449026/the-field-must-be-a-number

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!