MVC3: How to change the generic [Required] validation message text?
asp.net-mvc-3, c#, data-annotations
Solution
Deriving your own attribute is a fair option and probably has the lowest overhead to get started, but you'll need to go back and change all your existing uses of `[Required]`. You (and any others on your team) will also need to remember to use (and teach newcomers to use) the right one going forward.
An alternative is to replace the `ModelMetadataProviders` and `ModelValidatorProviders` to return strings from a resource file. This avoids the drawbacks above. It also lays the groundwork for replacing messages for other attributes (e.g., `MaxLengthAttribute`) and for supporting additional languages.
protected void Application_Start()
{
var stringProvider = new ResourceStringProvider(Resources.LocalizedStrings.ResourceManager);
ModelMetadataProviders.Current = new LocalizedModelMetadataProvider(stringProvider);
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new LocalizedModelValidatorProvider(stringProvider));
}
Here is the full source, documentation, and a blog post describing the usage.
Problem
When you decorate a model object's property with the `Required` attribute and don't specify `ErrorMessage` or `ResourceType/Name` you get the validation message in the interpolated form of "The {0} field is required.", where param 0 is the value of the `DisplayName` attribute of that property. I want to change that default string to something else but I want to keep the generic nature of it, that is I don't want to specify `ErrorMessage` or `ResourceType/Name` for every property of the model object. Where is the default string stored and how can I change it?