2010-07-19 6 views
2

Я использую аннотации данных для проверки адреса электронной почты.C# RegularExpression Конструктор атрибутов, вызываемый один раз

Чтобы показать сообщение об ошибке, когда адрес emailaddress недействителен, я использую RESX-файл с именем ErrorMessages.

Мой код выглядит так:

public class EmailAdressAttribute : RegularExpressionAttribute 
{ 
    public EmailAdressAttribute() 
     : base(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,3}|[0-9]{1,4})(\]?)$") 
    { 

     ErrorMessage = ErrorMessages.ValidateEmailAdress; 
    } 

Когда я изменяю язык (текущая культура) моей ASP.NET MVC приложения во время работы приложения, старый язык все еще отображается.
После отладки я обнаружил, что конструктор для этого атрибута вызывается только один раз (когда я использую его в первый раз).

Как атрибут кэшируется? Как я могу показать правильное сообщение об ошибке из файла ресурсов?

ответ

3

Вместо того, чтобы устанавливать значение свойства ErrorMessage в конструкторе, как насчет переопределения этого свойства и чтения этого текста с ресурса в данный момент, когда это необходимо?

public override string ErrorMessage 
{ 
    get { return ErrorMessages.ValidateEmailAdress; } 
} 

атрибут не то, что принадлежит к например класса, но к Тип. Вот почему он построен только один раз в жизни вашего приложения.

+0

Спасибо, решение работает (без использования ключевого слова override). – Jan

+0

Хорошо! Я догадался, что ErrorMessage является свойством базового класса. По-видимому, он принадлежит классу EmailAddressAttribute. –

Смежные вопросы