Атрибуты DataAnnotations кэшируются? Если да, то как переключаться между разными культурами? - PullRequest
2 голосов
/ 09 мая 2011

У меня есть сайт, который поддерживает как США, так и Канаду. При проверке почтового индекса используется пользовательский атрибут 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 из первой страны. Поэтому, если они загружают его в США, он сохраняет почтовый индекс США при переключении в Канаду и наоборот.

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

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

1 Ответ

1 голос
/ 03 мая 2012

Я нашел ответ.Создайте пользовательский 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/.

Cheers

...