1

我的 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;
        }

    }
}
4

1 回答 1

1

我可以建议您创建两个不同的 DateValidator 类实现,每个都有不同的消息。这也符合 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 回答