我的本地化模型属性有问题,因为我们决定不使用内置的本地化功能。
public class LocalizedRequiredAttribute : RequiredAttribute
{
public LocalizedRequiredAttribute(string displayName)
{
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalizedRequiredAttribute), typeof(RequiredAttributeAdapter));
ErrorMessage = ResourceProvider.Get(string.Format("resValidation{0}Missing", displayName));
}
}
问题是全局文化可以由用户改变,但ErrorMessage, DisplayName和东西是由框架缓存的。有什么建议如何解决这个问题,并在运行时绑定属性?
我终于找到了一个解决方案。你只需要重写FormatErrorMessage方法:
public class LocalizedRequiredAttribute : RequiredAttribute
{
private readonly string _displayName;
public LocalizedRequiredAttribute(string displayName)
{
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalizedRequiredAttribute), typeof(RequiredAttributeAdapter));
_displayName = displayName;
}
public override string FormatErrorMessage(string name)
{
return Resource.Get(string.Format("resValidation{0}Missing", _displayName));
}
}