DataTypeAttribute是DefaultModelBinder类的验证属性

时间:2011-11-12 20:15:25

标签: asp.net .net asp.net-mvc data-annotations asp.net-mvc-validation

我刚刚注意到DataTypeAttribute类继承自System.ComponentModel.DataAnnotations.ValidationAttribute

就ASP.NET MVC DefaultModelBinder类而言,DataTypeAttribute是否为验证属性?用简单的英语,ModelBinder是否根据DataTypeAttribute

验证对象

例如,如果我将DataType属性指定为DataType.EmailAddress,它是否会验证电子邮件地址,或者此属性仅提供对象的元数据。

更新

我在SO上发现了一个类似的问题:

Is the DataTypeAttribute validation working in MVC2?

所以,据说它不能作为验证属性。那么,如果它不作为验证属性,它为什么会从System.ComponentModel.DataAnnotations.ValidationAttribute继承呢?

2 个答案:

答案 0 :(得分:4)

DataTypeAttribute本身不包含任何验证逻辑。

它从ValidationAttribute派生的原因是,您可以创建一个新的自定义数据类型类,它既是DataType又是Validation,都包含在一个中。这是.NET不允许多重继承的不幸副作用。

所以,是的,它是一个验证器......默认情况下不进行验证。它耐心等待你做重物。 :)

实际上,如果你看一下MVC 3 Futures,你会发现我们利用它来创建新的自定义验证器,我们知道jQuery已经能够提供客户端验证逻辑了,我们添加了镜像服务器 - 验证逻辑(并保留了模板的DataType优势)。

答案 1 :(得分:1)

基于MVC3源代码,DataTypeAttribute的唯一目的是填充ModelMetadata.DataTypeName property。此属性仅供EditorFor / DisplayFor模板生成使用。所以你说得对,它与验证无关。所以我不知道为什么它继承自ValidationAttribute。也许框架作者保留它以供将来使用。