2010-07-19 76 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