How to change ErrorMessage property of the DataAnnotation validation in MVC2.0
        Posted  
        
            by Raj Aththanayake
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Raj Aththanayake
        
        
        
        Published on 2010-04-12T05:47:05Z
        Indexed on 
            2010/04/12
            5:53 UTC
        
        
        Read the original article
        Hit count: 823
        
mvc2
My task is to change the ErrorMessage property of the DataAnnotation validation attribute in MVC2.0. For example I should be able to pass an ID instead of the actual error message for the Model property and use that ID to retrieve some content(error message) from a another service e.g database, and display that error message in the View instead of the ID. In order to do this I need to set the DataAnnotation validation attribute’s ErrorMessage property.
    [StringLength(2, ErrorMessage = "EmailContentID.")]
    [DataType(DataType.EmailAddress)]        
    public string Email { get; set; }
It seems like an easy task by just overriding the DataAnnotationsModelValidatorProvider ‘s protected override IEnumerable GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable attributes)
However it seems to be a complicated enough.
a. MVC DatannotationsModelValidator’s ErrorMessage property is read only. So I cannot set anything here b. System.ComponentModel.DataAnnotationErrorMessage property(get and set) which is already set in MVC DatannotationsModelValidator so we cannot set again. If you try to set you get “The property cannot set more than once…” error message appears.
public class CustomDataAnnotationProvider : DataAnnotationsModelValidatorProvider { protected override IEnumerable GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable attributes) { IEnumerable validators = base.GetValidators(metadata, context, attributes);
        foreach (ValidationAttribute validator in validators.OfType<ValidationAttribute>())
        {
            validator.ErrorMessage = "Error string from DB";
        }
       //......
    }
Can anyone please help me on this?
© Stack Overflow or respective owner