Как определить тип ресурса атрибута проверки только один раз для каждой сборки? - PullRequest
1 голос
/ 30 ноября 2011

В настоящее время я настраиваю свою модель домена для использования атрибутов проверки DataAnnotation, таких как RequiredAttribute и RangeAttribute.

Для одного свойства это выглядит так:

  [Required(ErrorMessageResourceType = typeof(ModelValidationMessages), ErrorMessageResourceName = "SurnameRequiredMessage")]
  public string Surname { get; set; }

Однако это не такне единственное свойство, не говоря уже о единственном модельном классе.Сообщения проверки, однако, перечислены только в классе ресурсов ErrorMessageResourceType для всей сборки.

Вопросы:

  • Можно ли определить ErrorMessageResourceTypeсвойство для всего класса?
  • Можно ли определить свойство ErrorMessageResourceType для всей сборки?
  • Если нет, другим способом?

Заранее спасибо!

1 Ответ

2 голосов
/ 30 ноября 2011

Вы можете написать пользовательский DataAnnotationsModelValidator:

public class GlobalResourceTypeResourceDataAnnotationsModelValidator : DataAnnotationsModelValidator<ValidationAttribute>
{
    public GlobalResourceTypeResourceDataAnnotationsModelValidator(
        ModelMetadata metadata, 
        ControllerContext context, 
        ValidationAttribute attribute
    )
        : base(metadata, context, attribute)
    {
        if (Attribute.ErrorMessageResourceType == null)
        {
            Attribute.ErrorMessageResourceType = typeof(ModelValidationMessages);
        }
    }
}

и затем в Application_Start необходимо зарегистрировать адаптер для каждого используемого вами атрибута:

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredAttribute), typeof(GlobalResourceTypeResourceDataAnnotationsModelValidator));
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(StringLengthAttribute), typeof(GlobalResourceTypeResourceDataAnnotationsModelValidator));
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...