对于ASP.NET MVC基于标注特性的Model验证,很多人只知道应用在数据类型及其属性上用于定义验证规则和错误消息的ValidationAttribute。通过《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》的介绍,我们知道了最终用于进行Model验证的是一个叫做ModelValidator的组件。ValidationAttribute对应的ModelValidator为DataAnnotationsModelValidator,这篇简短的文章为你介绍ASP.NET MVC是如何针对Validation来创建DataAnnotationsModelValidator,以及后者如何利用前者实施Model验证的。[本文已经同步到《How ASP.NET MVC Works?》中]
ModelValidator是真正用于进行Model验证的组件,上面介绍的验证特性最终被封装成DataAnnotationsModelValidator对象进而被应用到Model验证系统中。如下面的代码片断所示,被封装的ValidationAttribute通过只读属性Attribute表示,该属性在构造函数中被初始化。
class DataAnnotationsModelValidator : ModelValidator
2: {
public DataAnnotationsModelValidator(ModelMetadata metadata, ControllerContext context, ValidationAttribute attribute);
override IEnumerable<ModelClientValidationRule> GetClientValidationRules();
5:
object container)
7: {
null)
9: {
this.Metadata.GetDisplayName()
11: };
this.Metadata.Model, validationContext);
if (validationResult != ValidationResult.Success)
14: {
new ModelValidationResult
16: {
17: Message = validationResult.ErrorMessage
18: };
return iteratorVariable2;
20: }
else
22: {
break;
24: }
25: }
protected ValidationAttribute Attribute { get; }
string ErrorMessage { get; }
bool IsRequired { get; }
29: }