具有多个参数的自定义验证属性
我正在尝试构建一个自定义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()
,为验证目的可以使用最大字数。 这是有道理的,还是像我说的,我错过了什么?