1

私の ASP.NET MVC3 プロジェクトには、満たす必要がある 2 つの条件を持つカスタム ValidationAttribute があります。うまく機能しますが、カスタマイズされたエラーメッセージを返すことで、どの検証ルールが破られたかをユーザーに知らせたいと思います。

私が使用している方法(基本クラスからエラーメッセージを継承する)では、_defaultError定数の値を初期化した後に変更できないことがわかっているので....

満たさなかった条件に応じて異なるエラー メッセージを返すにはどうすればよいですか?

ここに私の ValidationAttribute コードがあります:

public class DateValidationAttribute :ValidationAttribute
{
    public DateValidationAttribute() 
        : base(_defaultError)
    {

    }

    private const string _defaultError = "{0} [here is my generic error message]";

    public override bool IsValid(object value)
    {
        DateTime val = (DateTime)value;

        if (val > Convert.ToDateTime("13:30:00 PM"))
        {
            //This is where I'd like to set the error message
            //_defaultError = "{0} can not be after 1:30pm";
            return false;
        }
        else if (DateTime.Now.AddHours(1).Ticks > val.Ticks)
        {
            //This is where I'd like to set the error message
            //_defaultError = "{0} must be at least 1 hour from now";
           return false;
        }
        else
        {
            return true;
        }

    }
}
4

1 に答える 1

1

DateValidatorクラスの2つの異なる実装を作成することをお勧めします。それぞれ、異なるメッセージがあります。これは、各バリデーターの関連する検証情報を個別に保持するだけなので、SRPとも一致します。

public class AfternoonDateValidationAttribute : ValidationAttribute
{
   // Your validation logic and message here
}

public class TimeValidationAttribute : ValidationAttribute
{
   // Your validation logic and message here
}
于 2012-05-21T01:57:14.647 に答える