Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change the default "The field must be a number"

I'm working on an MVC 3 application. One of the fields in the model is of type double and defined as follows:

    [Required(ErrorMessageResourceName = "ListingItemPriceRequired", ErrorMessageResourceType = typeof(ErrorMessages))]
    [Display(Name = "DisplayListingItemPrice", ResourceType = typeof(Display))]
    [Range(1, 500000000, ErrorMessageResourceName = "ListingItemPriceNotWithinRange", ErrorMessageResourceType = typeof(ErrorMessages))]
    public double Price { get; set; }

Still, when I enter a value of a number with some trailing spaces like "342 ", I get the default message "The field price must be a number".

Even the validation attribute on the Price input field has something as "data-val-number".

Thanks

like image 481
Bill Avatar asked Aug 06 '12 15:08

Bill


3 Answers

I found it easier to just say:

 [RegularExpression("([0-9]+)", ErrorMessageResourceType = typeof(ErrorMessage), ErrorMessageResourceName = "NumberInvalid")]
like image 151
Nick Avatar answered Oct 27 '22 21:10

Nick


If you're ok with changing just the unobtrusive validation side of things, you can always supply your own jquery validation attributes:

@Html.TextBoxFor(model => model.Price, new Dictionary<string, object>() { { "data-val-number", "Price must be a valid number." } })

Or, the following is simpler as MVC replaces underscores with dashes in attribute names:

@Html.TextBoxFor(model => model.Price, new { data_val_number = "Price must be a valid number." })
like image 30
ScottE Avatar answered Oct 27 '22 20:10

ScottE


The default message is baked deeply into the framework, as a string resource. It is added by the default model binder when trying to bind the string value to a double type. So if you want to change this default message you could write a custom model binder. Here's an example I wrote for the DateTime type which has the same issue: https://stackoverflow.com/a/7836093/29407

like image 6
Darin Dimitrov Avatar answered Oct 27 '22 19:10

Darin Dimitrov