ASP.Net 通用本地化在切换语言时不起作用

ASP.Net Generic Localization does not work while switching language

我使用 DisplayNameRequired 属性实现了本地化,当我从英语切换到阿拉伯语时,它与 DisplayName 一起工作正常,但对于 Required 属性 - 它没有更新阿拉伯语错误消息。

下面是我的实现方式和我的代码:

DisplaName - 在两种语言切换中都工作正常..

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event)]
    public class LocalizedDisplayNameAttribute : DisplayNameAttribute
    {
        private ResourceUtils.Key _resourceKey;

        public LocalizedDisplayNameAttribute(ResourceUtils.Key resourceKey)
            : base()
        {
            _resourceKey = resourceKey;
        }

        public override string DisplayName
        {
            get
            {
                return ResourceUtils.GetDisplayName(_resourceKey);
            }
        }
    }

它工作正常,但只有一次 - 当从一种语言切换到另一种语言时,它会在切换后保留以前语言的旧消息.. ErrorMessage 不会更新..

public class RequiredLocalizedAttribute : RequiredAttribute
{
    public RequiredLocalizedAttribute(ResourceUtils.Key resourceKey)
    {
        this.ErrorMessage = ResourceUtils.GetDisplayName(resourceKey);
    }
}

Global.asax

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredLocalizedAttribute), typeof(RequiredAttributeAdapter));

模态代码。

[LocalizedDisplayName(ResourceUtils.Key.Number)]
[RequiredLocalized(ResourceUtils.Key.NumberMessage)]
public int Number { get; set; }

我该怎么办?为 ErrorMessage 切换语言时它不起作用 - DisplayName 在语言切换时成功更新。

谢谢。

您的自定义 required 属性仅初始化一次,而不是按请求初始化。然后在构造函数中设置错误消息。因此,您的错误消息未更新。 考虑为它编写自定义工厂。或者只需在 FormatErrorMessage 方法中更新您的消息:

public class RequiredLocalizedAttribute : RequiredAttribute
{
    ResourceUtils.ResourceKey _resourceKey;
    public RequiredLocalizedAttribute(ResourceUtils.ResourceKey resourceKey)
    {
        this._resourceKey = resourceKey;
    }

    public override string FormatErrorMessage(string name)
    {
        this.ErrorMessage = ResourceUtils.GetDisplayName(resourceKey);
        return base.FormatErrorMessage(name);
    }
}