2010-07-19 98 views
2

我正在使用数据注释来验证电子地址。C#RegularExpression属性构造函数被调用一次

要显示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应用程序的语言(目前的文化),同时运行的应用程序,旧的语言仍显示。
调试后,我发现该属性的构造函数只被调用一次(当我第一次使用它)。

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

回答

3

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

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

属性是不是属于类的实例,但的类型。这就是为什么它只在您的应用程序的一生中构建一次。

+0

谢谢你,解决方案的工作(不使用覆盖关键字)。 – Jan 2010-07-19 11:52:50

+0

好!我猜想ErrorMessage是基类的一个属性。显然它属于EmailAddressAttribute类。 – 2010-07-19 12:08:23