我正在使用数据注释来验证电子邮件地址。
为了在电子邮件地址无效时显示错误消息,我使用了名为 ErrorMessages 的 RESX 文件。
我的代码是这样的:
public class EmailAdressAttribute : RegularExpressionAttribute
{
public EmailAdressAttribute()
: base(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,3}|[0-9]{1,4})(\]?)$")
{
ErrorMessage = ErrorMessages.ValidateEmailAdress;
}
当我在运行应用程序时更改为 ASP.NET MVC 应用程序的语言(当前文化)时,仍显示旧语言。
经过调试,我发现这个属性的构造函数只被调用一次(当我第一次使用它时)。
属性是如何被缓存的? 如何从资源文件中显示正确的错误消息?
最佳答案
与其在构造函数中设置 ErrorMessage 属性的值,不如重写该属性并在需要时从资源中读取该文本怎么样?
public override string ErrorMessage
{
get { return ErrorMessages.ValidateEmailAdress; }
}
属性不是属于类的实例,而是属于类型。这就是为什么它在应用程序的生命周期中仅构建一次。
关于C# 正则表达式属性构造函数调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3280240/