C#RegularExpression属性构造函数调用一次

时间:2010-07-19 10:29:36

标签: c# validation resources data-annotations

我正在使用数据注释来验证电子邮件地址。

要在emailaddress无效时显示错误消息,我使用名为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应用程序的语言(当前文化)时,仍会显示旧语言。
经过调试后,我发现该属性的构造函数只被调用一次(当我第一次使用它时)。

如何缓存属性? 如何从资源文件中显示正确的错误消息?

1 个答案:

答案 0 :(得分:3)

如何在构造函数中设置ErrorMessage属性的值,而不是覆盖该属性并在需要时从资源中读取该文本呢?

public override string ErrorMessage
{
   get { return ErrorMessages.ValidateEmailAdress; }
}

该属性不属于该类的实例,而是属于类型。这就是为什么它只在你的应用程序的生命周期中构建一次。