如何创建条件ValidationAttribute错误消息?

时间:2012-05-21 01:51:21

标签: asp.net-mvc-3 validationattribute

我的ASP.NET MVC3项目中有一个自定义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;
        }

    }
}

1 个答案:

答案 0 :(得分:1)

我可以建议你创建两个不同的DateValidator类实现,每个类都有不同的消息。这也与SRP一致,因为您只需将每个验证器中的相关验证信息保持不变。

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

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