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

Bax*_*ter 2 c# validation asp.net-mvc razor

我正在尝试构建一个自定义 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为 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)
Run Code Online (Sandbox Code Playgroud)

Mat*_* G. 5

我可能遗漏了一些明显的东西——这种情况经常发生在我身上——但是你不能在 WordCountValidator 的构造函数中将最大字数保存为实例变量吗?有点像这样:

public class WordCountValidator : ValidationAttribute
{
    readonly int _maximumWordCount;

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

这样,当您调用 时IsValid(),最大字数可用于验证目的。这是否有意义,或者就像我说的那样,我是否遗漏了什么?