我使用DisplayName
和Required
属性实现了本地化,当我从英语切换到阿拉伯语时,它适用于DisplayName
但是对于必需属性 - 它没有更新阿拉伯语错误消息。
以下是我实施的方式和下面的代码:
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会成功更新。
感谢。
答案 0 :(得分:1)
您的自定义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);
}
}