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

时间:2014-11-10 19:32:22

标签: c# asp.net-mvc validation 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;
    }
}

然而,这不起作用,因为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)

1 个答案:

答案 0 :(得分:3)

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

public class WordCountValidator : ValidationAttribute
{
    readonly int _maximumWordCount;

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

    // ...
}

当您拨打IsValid()时,您可以使用最大字数进行验证。这是否有意义,或者就像我说的那样,我错过了什么?