C# 正则表达式属性构造函数调用一次

标签 c# validation resources data-annotations

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

为了在电子邮件地址无效时显示错误消息,我使用了名为 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/

相关文章:

javascript - jQuery 验证日期范围问题

linux - alsa:如何使用它的名称而不打开它以编程方式查找设备是否忙/正在使用

c# - 如何确定字符串是本地文件夹字符串还是网络字符串?

html - Google 不遵循 W3C 标准...哇?

c# - 如何在下拉列表 selectedIndexChanged 事件上删除动态创建的文本框控件并在新的选定值上重新创建新的动态控件

javascript - JQuery 验证引擎无法在 Firefox 或 IE 上运行

android - Google Play 商店是否会从 apk 中删除未使用的资源?

c++ - IDC 是什么意思?

c# - jsonresult 不回来?

c# - 如果属性为空,如何设置属性的值?