Кэшируются ли атрибуты DataAnnotations? Если да, то как переключаться между разными культурами?

У меня есть сайт, который поддерживает как США, так и Канаду. Моя проверка почтового индекса использует настраиваемый атрибут RegEx, который я создал, чтобы разрешить локализацию моего шаблона RegEx:

public class RegularExpressionAttribute : System.ComponentModel.DataAnnotations.RegularExpressionAttribute
{
    public RegularExpressionAttribute(Type patternResourceType, string patternResourceName)
        : this(ResourceHelper.GetString(patternResourceType, patternResourceName))
    {
        this.PatternResourceName = patternResourceName;
        this.PatternResourceType = patternResourceType;
    }
}

Проблема в том, что если клиент переключается из одной страны в другую, он сохраняет шаблон RegEx из первой страны. Поэтому, если они загружают его в США, он сохраняет почтовый индекс США, когда они переключаются на Канаду, и наоборот.

Как я могу заставить это всегда использовать правильную культуру?

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


person Jerad Rose    schedule 09.05.2011    source источник
comment
Привет, ты когда-нибудь решал эту проблему? У меня точно такая же проблема. Похоже, атрибуты загружаются только один раз при запуске приложения.   -  person Jonesie    schedule 29.04.2012
comment
Нет, в итоге я решил это с помощью уродливого обходного пути, включающего жесткое кодирование некоторых вещей в атрибуте.   -  person Jerad Rose    schedule 02.05.2012


Ответы (1)


Я нашел ответ. Создайте пользовательский DataAnnotationsModelMetadataProvider. Это действительно легко. Вам просто нужно переопределить один метод. Это вызывается каждый раз, когда требуется атрибут свойства. В Интернете есть довольно много примеров для этого, например: http://bradwilson.typepad.com/blog/2010/01/why-you-dont-need-modelmetadataattributes.html и http://www.freewebdevelopersite.com/2011/07/10/custom-metadata-providers-in-asp-net-mvc/.

Ваше здоровье

person Jonesie    schedule 03.05.2012