我正在尝试构建一个自定义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)
答案 0 :(得分:3)
我可能会遗漏一些明显的东西 - 这种情况在我身上发生了很多 - 但你能不能将最大字数保存为WordCountValidator构造函数中的实例变量?有点像这样:
public class WordCountValidator : ValidationAttribute
{
readonly int _maximumWordCount;
public WordCountValidator(int words)
{
_maximumWordCount = words;
}
// ...
}
当您拨打IsValid()
时,您可以使用最大字数进行验证。这是否有意义,或者就像我说的那样,我错过了什么?