2


1

1回呼び出されるC#RegularExpression Attributeコンストラクター

メールアドレスを検証するためにデータ注釈を使用しています。

メールアドレスが無効なときにエラーメッセージを表示するには、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回しか呼び出されないことがわかりました(初めて使用する場合)。

属性はどのようにキャッシュされますか? リソースファイルから正しいエラーメッセージを表示するにはどうすればよいですか?

1 Answer


3


コンストラクターでErrorMessageプロパティの値を設定する代わりに、そのプロパティをオーバーライドして、必要なときにリソースからそのテキストを読み取るのはどうですか?

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

属性は、クラスの*インスタンス*に属するものではなく、*タイプ*に属するものです。 そのため、アプリの存続期間に一度だけ構築されます。