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

本文关键字:自定义 验证 属性 参数 | 更新日期: 2023-09-27 18:29:51

我正在尝试构建一个自定义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()时,最大字数可用于验证目的。这有道理吗,或者就像我说的,我错过了什么吗?