具有多个参数的自定义验证属性
本文关键字:自定义 验证 属性 参数 | 更新日期: 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()
时,最大字数可用于验证目的。这有道理吗,或者就像我说的,我错过了什么吗?