ASP.NET MVC - Default Range validation error message not being overridden

cezarlamann picture cezarlamann · Sep 18, 2014 · Viewed 7.9k times · Source

Say I have a model property like this:

[Range(1, 31, ErrorMessage = "O dia de fechamento deve possuir valores entre 1 e 31")]
public int DataInicial { get; set; }

Even with a custom error message set on the annotation, I'm still getting the default error message for the Range annotation "Please enter a value less than or equal to 31.", when I type something like "32" or more at the @Html.TextBoxFor(model => model.DataInicial) field.

I'm aware of this post, but I think if you can set custom messages at annotation level, It should work without setting an App_GlobalResources and a .resx file, setting third-party libraries or whatever... I know that adding a .resx file and put all those validation strings there, is a "best-practice", but...

So, where I could be wrong, since the messages are not showing correctly?

Thank you in advance.

Answer

Dano picture Dano · Feb 18, 2015

I was running into the same issue and experimented a little. Just learning MVC myself and it wasn't too obvious, but the solution seems nice and makes sense. The issue just comes down to which validation attribute gets triggered.

I found ErrorMessage is specific to the validation it is associated with.

A simple example should make it real clear...

[Required(ErrorMessage="xxx may not be blank.")]
[Range(0.0,1000.0,ErrorMessage="The value entered must be 0 to 1000.00")]
public virtual double xxx ()  // snip...

If empty, upon validation you will get "xxx may not be blank". While a value has been entered but not valid you should see the other error "The value entered...".