Моя задача - изменить свойство ErrorMessage атрибута проверки DataAnnotation в MVC2.0. Например, я должен иметь возможность передавать идентификатор вместо фактического сообщения об ошибке для свойства Model и использовать этот идентификатор для извлечения некоторого содержимого (сообщения об ошибке) из другой службы, например базы данных, и отображать это сообщение об ошибке в представлении вместо Я БЫ. Для этого мне нужно установить свойство ErrorMessage атрибута валидации DataAnnotation.
[StringLength(2, ErrorMessage = "EmailContentID.")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
Это кажется простой задачей, просто переопределив DataAnnotationsModelValidatorProvider
защищенное переопределение IEnumerable GetValidators (метаданные ModelMetadata, контекст ControllerContext, атрибуты IEnumerable)
Однако это кажется достаточно сложным.
а. Свойство ErrorMessage MVC DatannotationsModelValidator доступно только для чтения. Поэтому я не могу ничего установить здесь
б. Свойство System.ComponentModel.DataAnnotationErrorMessage (получить и установить), которое уже установлено в MVC DatannotationsModelValidator, поэтому мы не можем установить снова. Если вы попытаетесь установить, вы получите сообщение об ошибке «Свойство не может быть установлено более одного раза…».
public class CustomDataAnnotationProvider : DataAnnotationsModelValidatorProvider
{
protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
{
IEnumerable<ModelValidator> validators = base.GetValidators(metadata, context, attributes);
foreach (ValidationAttribute validator in validators.OfType<ValidationAttribute>())
{
messageId = validator.ErrorMessage;
validator.ErrorMessage = "Error string from DB And" + messageId ;
}
//......
}
}
Может кто-нибудь, пожалуйста, помогите мне в этом?