C # RegularExpression Атрибут конструктор вызывается один раз - PullRequest
2 голосов
/ 19 июля 2010

Я использую аннотации данных для проверки адреса электронной почты.

Чтобы показать сообщение об ошибке, когда адрес электронной почты недействителен, я использую файл 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 при запуске приложения, старый язык все еще отображается.
После отладки я обнаружил, что конструктор дляэтот атрибут вызывается только один раз (когда я использую его впервые).

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

1 Ответ

3 голосов
/ 19 июля 2010

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

...