我刚刚注意到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
继承呢?
答案 0 :(得分:4)
DataTypeAttribute本身不包含任何验证逻辑。
它从ValidationAttribute派生的原因是,您可以创建一个新的自定义数据类型类,它既是DataType又是Validation,都包含在一个中。这是.NET不允许多重继承的不幸副作用。
所以,是的,它是一个验证器......默认情况下不进行验证。它耐心等待你做重物。 :)
实际上,如果你看一下MVC 3 Futures,你会发现我们利用它来创建新的自定义验证器,我们知道jQuery已经能够提供客户端验证逻辑了,我们添加了镜像服务器 - 验证逻辑(并保留了模板的DataType优势)。
答案 1 :(得分:1)
基于MVC3源代码,DataTypeAttribute
的唯一目的是填充ModelMetadata.DataTypeName
property。此属性仅供EditorFor / DisplayFor模板生成使用。所以你说得对,它与验证无关。所以我不知道为什么它继承自ValidationAttribute
。也许框架作者保留它以供将来使用。