Bax*_*ter 2 c# validation asp.net-mvc 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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为 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)
Run Code Online (Sandbox Code Playgroud)
我可能遗漏了一些明显的东西——这种情况经常发生在我身上——但是你不能在 WordCountValidator 的构造函数中将最大字数保存为实例变量吗?有点像这样:
public class WordCountValidator : ValidationAttribute
{
readonly int _maximumWordCount;
public WordCountValidator(int words)
{
_maximumWordCount = words;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
这样,当您调用 时IsValid()
,最大字数可用于验证目的。这是否有意义,或者就像我说的那样,我是否遗漏了什么?