上一篇中讲解了mvc中的远程验证,也就是ajax验证,本章继续介绍mvc中的自定义特性验证方式
asp.net mvc自定义验证逻辑分为两种方式:客户端验证与服务端验证
相应的涉及到两个接口ValidationAttribute,IClientValidatable
ValidationAttibute服务端验证,IClientValidatable客户端验证
本章重点,ValidationAttribute服务器端验证。自定义特性验证必须要实现ValidationAttribute中的IsValid至少一个重载方法
public class MaxWordsAttribute : ValidationAttribute
{
private readonly int _maxWords;
//构造器
public MaxWordsAttribute(int maxWords)
{
_maxWords = maxWords;
}
//验证方法
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
var valueAsString = value.ToString();
if (valueAsString.Split(' ').Length > _maxWords)
{
return new ValidationResult("Too many words");
}
}
return ValidationResult.Success;
}
}
代码上面大家通过注释都能够了解,调用方式和asp.net mvc内置的验证方式一样,如下
[Required]
[MaxWords(2,ErrorMessage = "很多单词了 {0}")]
public string Name { get; set; }
好,看下运行的结果
看到我们自定义的特性效果出来了,有成就感吧,但是细心的程序猿朋友应该注意到,自定义特性的ErrorMessage消息没有显示出来,因为代码中我们写死了,如何通过参数将ErrorMessage传进去呢,
运行代码后的效果为: