具有多个参数的自定义验证属性

我正在尝试构建一个自定义ValidationAttribute来验证给定字符串的字数:

public class WordCountValidator : ValidationAttribute
{
    public override bool IsValid(object value, int count)
    {
        if (value != null)
        {
            var text = value.ToString();
            MatchCollection words = Regex.Matches(text, @"[S]+");
            return words.Count <= count;
        }

        return false;
    }
}

但是,这不起作用,因为IsValid()只允许一个参数,即被验证对象的值,所以我不能用这种方法重写该方法。

任何关于如何在仍使用简单剃刀格式的情况下完成此任务的想法:

        [ViewModel]
        [DisplayName("Essay")]
        [WordCount(ErrorMessage = "You are over the word limit."), Words = 150]
        public string DirectorEmail { get; set; }

        [View]
        @Html.ValidationMessageFor(model => model.Essay)

我可能会错过显而易见的东西 - 发生在我身上的很多事情 - 但是,您能否在WordCountValidator的构造函数中将最大字数保存为实例变量? 有点像这样:

public class WordCountValidator : ValidationAttribute
{
    readonly int _maximumWordCount;

    public WordCountValidator(int words)
    {
        _maximumWordCount = words;
    }

    // ...
}

通过这种方式,当您调用IsValid() ,为验证目的可以使用最大字数。 这是有道理的,还是像我说的,我错过了什么?

链接地址: http://www.djcxy.com/p/56579.html

上一篇: Custom Validation Attribute With Multiple Parameters

下一篇: Overload EF Validation with Custom class