Мне нужно установить свойство ErrorMessage атрибута валидации DataAnnotation в MVC 2.0. Например, я должен иметь возможность передавать идентификатор вместо фактического сообщения об ошибке для свойства Model, например ...
[StringLength(2, ErrorMessage = "EmailContentID")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
Затем используйте этот идентификатор («EmailContentID») для извлечения некоторого контента (сообщения об ошибке) из другой службы, например, из базы данных. Затем сообщение об ошибке отображается пользователю вместо идентификатора. Для этого мне нужно установить свойство ErrorMessage атрибута проверки DataAnnotation.
Это кажется простой задачей, просто переопределяя защищенное переопределение DataAnnotationsModelValidatorProvider IEnumerable GetValidators (метаданные ModelMetadata, контекст ControllerContext, атрибуты IEnumerable)
Однако сейчас это сложно ....
A. Свойство ErrorMessage MVC DatannotationsModelValidator доступно только для чтения. Поэтому я не могу ничего установить здесь
B. Свойство 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 ;
}
//......
}
}
Может ли кто-нибудь дать мне правильное направление по этому вопросу?
Заранее спасибо.